首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring-xd redis消息总线从消息中删除报头。

Spring-xd redis消息总线从消息中删除报头。
EN

Stack Overflow用户
提问于 2014-08-01 04:38:48
回答 1查看 294关注 0票数 2

我使用redis作为spring分布式env的消息存储库。

我将消息头设置如下,

代码语言:javascript
复制
oufinalTreeMapsg1 = MessageBuilder.withPayload(treeMap).setHeader("columnNames", columnNames).build();

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

发送时的标头

代码语言:javascript
复制
[Headers={columnNames=abc,def, id=74acf995-ec39-0e1c-a426-c9e27b1d47d6, timestamp=1406784568493}]

接收的报头

代码语言:javascript
复制
[Headers={id=aed8dc5b-5b24-d444-7583-c2da7a21d31c, timestamp=1406784568495}]

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

请帮我解决这个问题,

谢谢你,-Suyodha

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-01 13:37:04

默认情况下,Redis消息总线不支持传递自定义标头;但是,您可以在redis-bus.xml中的第三个redis-bus.xml中添加一个逗号分隔的列表(在xd-污jar中),从而向传递的自定义头添加自定义头。例如..。

代码语言:javascript
复制
<constructor-arg value="foo, bar" />

...will传递标头foobar

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

在(由总线使用)中,消息是不可变的;当消息通过某种介质(例如redis消息总线)传输时,会创建一个新消息,但这些消息头(id和时间戳)将发生变化。

默认情况下,RabbitMessageBus传递所有自定义标头。

更新

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

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

默认情况下,只传输某些系统级别的标头。

参见headers: in servers.yml in 应用程序配置下的Redis (和Kafka)

要传输的附加(字符串值)标头名称的逗号分隔列表。

请注意,这个(对于redis)不正确地表示这些必须是字符串值。最初是这样的,但是现在可以转换为/从json转换的任何对象都可以是一个标头值。

此外,kafka有一个raw模式,在这种情况下,没有任何头在总线上传送;出于性能原因,这可能是需要的,但是在这种模式中(比如消息类型转换)无法支持,因为框架无法确定类型。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25072967

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档