gpt4 book ai didi

redis - spring-xd redis 消息总线从消息中删除 header

转载 作者:IT王子 更新时间:2023-10-29 06:04:36 25 4
gpt4 key购买 nike

我正在使用 redis 作为 spring-xd 分布式环境的消息存储。

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

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 和 timestamp 不同,但 payload 相同。

请帮我解决这个问题,

提前致谢,-Suyodha

最佳答案

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

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

...将传递标题 foobar .

然而,即便如此,也只能传递简单的字符串值。

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

RabbitMessageBus默认传递所有自定义 header 。

更新

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

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

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

参见 headers:servers.ymlRedis (and Kafka) under Application Configuration .

comma-delimited list of additional (string-valued) header names to transport

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

另外kafka有一个raw模式,在这种情况下,根本不会通过总线传送 header ;出于性能原因,这可能是需要的,但由于框架无法确定类型,因此在此模式下不支持某些事情(如消息类型转换)。

关于redis - spring-xd redis 消息总线从消息中删除 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25072967/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com