SpringXD:当从Kafka中读取消息时,消息不包含标题

时间:2017-01-17 23:06:11

标签: apache-kafka spring-integration spring-xd

我有以下结构:

  • 卡夫卡主题
  • 我的kafka sink / source的模块
  • 卡夫卡来源之后的模块。基本上要阅读kafka源发送的内容。

问题是,当kafka接收器向kafka Queue发送事件,并且kafka源已经收到来自kafka主题的消息时,然后,下一个模块尝试读取头,它失败,因为没有找到头

我提出以下解决方案:要将标头包装在消息中,因此,内部有效负载将包含原始有效负载+标头。

我还有其他选择吗?

1 个答案:

答案 0 :(得分:0)

由于Kafka本身不支持标题,因此Kafka消息总线支持您描述的确切机制 - 只是您必须选择要通过总线传输的标题名称,以避免传输不需要的标题。

请参阅Application Configuration

向下滚动到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)
  ...
  
      
  1. 公交车运输的自定义标题列表。
  2.   

修改

对于兔子,默认情况下会传输所有标题:

    replyHeaderPatterns:       STANDARD_REPLY_HEADERS,*   
    ...
    requestHeaderPatterns:     STANDARD_REQUEST_HEADERS,* 

修改

如果您的意思是希望使用相同的技术使用接收器/源从Kafka发送/接收,那么您可以使用XD的支持类 - 请参阅EmbeddedHeadersMessageConverter。标头值编码为JSON。