Spring AMQP 1.3.5相关标识

时间:2015-06-17 16:14:58

标签: rabbitmq spring-integration amqp spring-amqp

有谁知道为什么Spring Integration(AMQP 1.3.5)要求correlation-id是一个字节数组? Rabbit的AMQP-Client 3.3.5为AMQP.BasicProperties类中的correlation-id获取一个String。 Spring是否需要在某些时候将字节数组转换为此String?我们发现Rabbit发送的消息中的correlation-id仍然是一个字节数组,并且永远不会转换为String。有什么见解吗?

1 个答案:

答案 0 :(得分:0)

好问题,我没有洞察力;这是我在项目上的时间,这是第一天的问题。

Spring AMQP将byte[]转换为DefaultMessagePropertiesConverter中的字符串(出站);默认情况下,RabbitTemplate使用UTF-8调用。结果字符串将添加到BasicProperties

在侦听器容器(入站)端,无条件地使用UTF-8。

当写入线路(byte[])时,兔子客户端会转换为ValueWriter.writeShortStr(),无条件地使用字符集UTF-8

所以,除非你更改RabbitTemplate中的字符集(这会很糟糕),否则它是一个无操作(但如果你已经有String则不必要。)

我只能推测,因为MessageProperties是一个抽象(并没有绑定到RabbitMQ),所以其他一些客户端在设计抽象时将其作为byte[]

由于我们只有一个rabbitmq实现,所以我不反对在抽象中添加优化以避免不必要的转换。

随意打开Improvement JIRA Issue,我们会在即将发布的1.5版本中查看它。