我使用redis作为spring分布式env的消息存储库。
我将消息头设置如下,
oufinalTreeMapsg1 = MessageBuilder.withPayload(treeMap).setHeader("columnNames", columnNames).build();在检查在处理器中接收到的消息时,它只显示id和时间戳。
发送时的标头
[Headers={columnNames=abc,def, id=74acf995-ec39-0e1c-a426-c9e27b1d47d6, timestamp=1406784568493}]接收的报头
[Headers={id=aed8dc5b-5b24-d444-7583-c2da7a21d31c, timestamp=1406784568495}]在这里,id和时间戳是不同的,但是有效载荷是相同的。
请帮我解决这个问题,
谢谢你,-Suyodha
发布于 2014-08-01 13:37:04
默认情况下,Redis消息总线不支持传递自定义标头;但是,您可以在redis-bus.xml中的第三个redis-bus.xml中添加一个逗号分隔的列表(在xd-污jar中),从而向传递的自定义头添加自定义头。例如..。
<constructor-arg value="foo, bar" />...will传递标头foo和bar。
但是,即使这样,也只能传递简单的字符串值。
在(由总线使用)中,消息是不可变的;当消息通过某种介质(例如redis消息总线)传输时,会创建一个新消息,但这些消息头(id和时间戳)将发生变化。
默认情况下,RabbitMessageBus传递所有自定义标头。
更新
Redis和kafka没有消息头或属性的概念。
redis和kafka消息总线实现现在支持servers.yml中的属性,以便在通过总线传输的消息头中添加自定义头。
默认情况下,只传输某些系统级别的标头。
参见headers: in servers.yml in 应用程序配置下的Redis (和Kafka)。
要传输的附加(字符串值)标头名称的逗号分隔列表。
请注意,这个(对于redis)不正确地表示这些必须是字符串值。最初是这样的,但是现在可以转换为/从json转换的任何对象都可以是一个标头值。
此外,kafka有一个raw模式,在这种情况下,没有任何头在总线上传送;出于性能原因,这可能是需要的,但是在这种模式中(比如消息类型转换)无法支持,因为框架无法确定类型。
https://stackoverflow.com/questions/25072967
复制相似问题