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

标签 redis spring-xd

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

我将消息标题设置如下,

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

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

发送时的 header

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

收到 header

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

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

请帮我解决这个问题

提前致谢, -苏尤达

最佳答案

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

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

...将传递 header 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 相互转换的对象都可以位于 header 值中。

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

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

相关文章:

java - Spring XD 使用自定义 TCP 序列化器

sockets - 在 macos 上通过命令行发送 TCP 消息

caching - 从 block 中的 redis 缓存中清除数据

python-3.x - 使用python解压LZ4

java - spring-xd-batch 作业锁定

java - kafka消费者收到一条之前消费过的消息

node.js - Redis - 如何每天使 key 过期

一个键的 Redis 集群标签,它是一个字节数组

javascript - redis 处理 'N' 没有连接的能力?

java - 如何使用 Spring Batch 查看集群中的所有作业?