Apache kafka SpringXD:messages don';当从卡夫卡读取消息时,不包括标题
我的结构如下:Apache kafka SpringXD:messages don';当从卡夫卡读取消息时,不包括标题,apache-kafka,spring-integration,spring-xd,Apache Kafka,Spring Integration,Spring Xd,我的结构如下: 卡夫卡主题 我的卡夫卡接收器/源的模块 卡夫卡来源之后的模块。基本上是阅读卡夫卡的消息来源 问题是,当kafka接收器向kafka队列发送事件时,kafka源收到来自kafka主题的消息,然后,下一个模块尝试读取头时,由于找不到头,因此失败 我提出了以下解决方案:将消息头包装在消息中,这样,内部有效负载将包含一个原始有效负载+消息头 我还有什么选择?由于Kafka本机不支持头,您描述的确切机制由Kafka消息总线支持-只是您必须选择要通过总线传输的头名称,以避免传输不需要的头
- 卡夫卡主题
- 我的卡夫卡接收器/源的模块
- 卡夫卡来源之后的模块。基本上是阅读卡夫卡的消息来源
我还有什么选择?由于Kafka本机不支持头,您描述的确切机制由Kafka消息总线支持-只是您必须选择要通过总线传输的头名称,以避免传输不需要的头 看 向下滚动至Kafka消息总线属性
messagebus:
kafka:
# connection properties
brokers: localhost:9092 (1)
zkAddress: localhost:2181 (2)
socketBufferSize: 2097152 (3)
# operating mode
mode: embeddedHeaders (4)
offsetManagement: kafkaTopic
headers:
# comma-delimited list of additional header names to transport (6)
...
replyHeaderPatterns: STANDARD_REPLY_HEADERS,*
...
requestHeaderPatterns: STANDARD_REQUEST_HEADERS,*
编辑
如果您的意思是希望使用相同的技术使用接收器/源从Kafka发送/接收,那么您可以使用XD的支持类来实现这一点-请参阅
EmbeddedHeadersMessageConverter
。标题值编码为JSON。这意味着我必须更改自去年以来一直使用的数据传输(我们使用的是rabbit)。这听起来不太划算,我是说如果我把数据传输改成卡夫卡。如果我不想更改数据传输,我应该描述更合适的解决方案吗?如果您使用Rabbit作为传输,则传输所有的头(映射到rabbitmq头);只有对于kafka传输,您才需要配置传输哪些头。rabbit传输可以配置为限制标头,但默认情况下,所有标头都被发送。如果您的意思是希望使用相同的技术使用接收器/源从Kafka发送/接收,那么您可以使用XD的支持类来实现这一点-请参阅EmbeddedHeadersMessageConverter
。标题值使用JSON编码。