Spring AMQP 1.3.5 идентификатор корреляции

Кто-нибудь знает, почему Spring Integration (AMQP 1.3.5) требует, чтобы идентификатор корреляции был массивом байтов? AMQP-Client 3.3.5 Rabbit принимает строку в качестве идентификатора корреляции в классе AMQP.BasicProperties. Разве Spring в какой-то момент не нужно преобразовывать байтовый массив в эту строку? Мы обнаружили, что идентификатор корреляции в сообщении, которое отправляет Кролик, по-прежнему является массивом байтов и никогда не преобразуется в строку. Любое понимание?


person CNDyson    schedule 17.06.2015    source источник


Ответы (1)


Хороший вопрос, я ничего не понимаю; это было до того, как я работал над проектом, и это проблема первого дня.

Spring AMQP преобразует byte[] в строку в DefaultMessagePropertiesConverter (исходящий); вызывается RabbitTemplate с использованием UTF-8 по умолчанию. Полученная строка добавляется к BasicProperties.

На стороне контейнера слушателя (входящего) безоговорочно используется UTF-8.

Клиент-кролик преобразуется в byte[] при записи на провод (в ValueWriter.writeShortStr()), безусловно, с использованием кодировки UTF-8.

Итак, если вы не измените кодировку в RabbitTemplate (что было бы плохо), это не работает (но не нужно, если у вас уже есть String).

Я могу только предположить, что, поскольку MessageProperties является абстракцией (и не привязан к RabbitMQ), у какого-то другого клиента он был byte[] при разработке абстракции.

Поскольку у нас есть только реализация rabbitmq, я бы не прочь добавить оптимизацию к абстракции, чтобы избежать ненужного преобразования.

Не стесняйтесь открывать проблему улучшения JIRA, и мы рассмотрим ее в следующей версии 1.5. выпускать.

person Gary Russell    schedule 17.06.2015