Spring-xd redis消息总线从消息中删除标题

时间:2014-08-01 04:38:49

标签: redis spring-xd

我使用redis作为spring-xd distributed env。

的消息存储

我正在设置邮件标题,如下所示

oufinalTreeMapsg1 = MessageBuilder.withPayload(treeMap).setHeader("columnNames", columnNames).build();

在检查处理器中收到的消息时,它只显示id和timestamp

发送时的标题

[Headers={columnNames=abc,def, id=74acf995-ec39-0e1c-a426-c9e27b1d47d6, timestamp=1406784568493}]

收到标题

[Headers={id=aed8dc5b-5b24-d444-7583-c2da7a21d31c, timestamp=1406784568495}]

这里的id和时间戳不同,但有效负载相同。

请帮我解决这个问题,

提前致谢, -Suyodha

1 个答案:

答案 0 :(得分:3)

Redis消息总线默认不支持传递自定义标头;但是,您可以通过在<constructor-arg/>(在xd-dirt jar中)的第三个redis-bus.xml中添加以逗号分隔的列表,为自己传递的标头添加自定义标头。例如......

<constructor-arg value="foo, bar" />

...会传递标题foobar

但是,即使这样,也只能传递简单的String值。

在Spring Integration(由总线使用)中,消息是不可变的;当它们通过某种媒介(例如redis消息总线)传输时,会使用内容创建一条新消息,但这些标题(id和时间戳)将会改变。

RabbitMessageBus默认会传递所有自定义标头。

<强>更新

Redis和kafka没有消息标题或属性的概念。

redis和kafka消息总线实现现在支持servers.yml中的属性,以便为通过总线传输的那些添加自定义标头。

默认情况下,仅传输一些系统级标头。

请参阅Redis (and Kafka) under Application Configurationheaders:中的servers.yml

  

要传输的其他(字符串值)标题名称的逗号分隔列表

请注意,这个(对于redis)错误地说这些必须是字符串值。这是最初的情况,但现在任何可以转换为/从json转换的对象都可以在标头值中。

此外,kafka具有raw模式,在这种情况下,根本不会在总线上传送标题;出于性能原因可能需要这样做,但在此模式下不支持某些内容(如消息类型转换),因为框架无法确定类型。