Пока я тестировал методы отправки и получения, которые я создал для своего проекта, я столкнулся со странной проблемой. Когда я отправляю определенное сообщение с использованием идентификатора корреляции, основанного на объекте UUID, принимающая сторона получает слегка измененную версию этого идентификатора корреляции (которая не может быть десериализована).
На стороне отправки я делаю это:
MessageProperties properties = new MessageProperties();
properties.setCorrelationId(MessageSerializer.serialize(UUID.randomUUID().toString()));
В моем последнем тесте был сгенерирован UUID: "d4170243-9e7e-4c42-9168-f9da4debc5bb"
Это генерирует следующий идентификатор корреляции (при сериализации):
[-84, -19, 0, 5, 116, 0, 36, 100, 52, 49, 55, 48, 50, 52, 51, 45, 57, 101, 55, 101, 45, 52, 99, 52, 50, 45, 57, 49, 54, 56, 45, 102, 57, 100, 97, 52, 100, 101, 98, 99, 53, 98, 98]
Когда я получаю сообщение с другой стороны, этот идентификатор немного изменяется:
[-17, -65, -67, -17, -65, -67, 0, 5, 116, 0, 36, 100, 52, 49, 55, 48, 50, 52, 51, 45, 57, 101, 55, 101, 45, 52, 99, 52, 50, 45, 57, 49, 54, 56, 45, 102, 57, 100, 97, 52, 100, 101, 98, 99, 53, 98, 98]
При использовании плагина управления RabbitMQ я заметил, что идентификатор уже изменился по прибытии в очередь.
Отслеживание моего кода на стороне отправки приводит меня к опции отправки класса RabbitTemplate.
RabbitTemplate template = new RabbitTemplate(connection);
template.setExchange("amq.direct");
template.setRoutingKey("some.route");
template.send(message);
Но я не могу понять, что вызывает эту проблему. Я предполагаю, что это просто я неправильно использую опцию CorrelationId. Может ли кто-нибудь помочь мне?
Ценить это.
MessageSerializer
? Сгенерированный массив байтов не является строго представлением массива байтов String#getByte(). - person Nicolas Labrot   schedule 10.04.2015UUID.randomUUID().toString().getByte()
- person Nicolas Labrot   schedule 10.04.2015