有谁知道为什么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。有什么见解吗?
答案 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版本中查看它。