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