我有int-kafka:outbound-channel-adapter
我用来向kafka发送消息,然后使用int-kafka:inbound-channel-adapter
接收消息。通信似乎工作正常,我能够发送和接收消息,但格式有点奇怪。我将单独的消息单独发送到我的出站适配器,但是当我收到消息时,我收到一条消息,所有消息都聚合到该消息的有效负载中。
这是我收到消息时消息有效负载的样子
[payload = {mytopic = {0 = [string message 1,string message 2,string message 3,string message 4,string message 5,...........]}},headers = {id = 3934de02-1f42-ab90-6aa5-9c15f3cd0b6e,timestamp = 1439260669762}]
接收集成流程如下所示
<int-kafka:inbound-channel-adapter
id="kafkaInboundAdapter" kafka-consumer-context-ref="consumerContext"
auto-startup="true" channel="inputFromKafka">
<int:poller fixed-delay="10" time-unit="MILLISECONDS"
max-messages-per-poll="5" />
</int-kafka:inbound-channel-adapter>
<int:channel id="inputFromKafka" />
<int:service-activator id="kakfaMessageHandler"
input-channel="inputFromKafka">
<bean class="com...broker.MessageHandler"></bean>
</int:service-activator>
我收到在一个spring集成消息中聚合的所有消息而不是在发送到kafka时发送的单独消息的任何原因。
答案 0 :(得分:0)
before_create
被设计为与其他多个轮询KafkaHighLevelConsumerMessageSource
一样:通过一次轮询获取数据并将其作为MessageSource<?>
返回。
在这种情况下,我们得到了Kafka List<?>
的结果:
stream
其中Message<Map<String, Map<Integer, List<Object>>>>
是卡夫卡payload
的{{1}}以及Map
和topic
的地图。
如果partition
上只使用一个message
,则只需将顶级topic
转换为consumerContext
地图。如果那里只有一个Map
,甚至可以直接转换到partition
列表。最后你可以得到payload
。
如果您希望逐个接收主题中的消息,请尽快查看partition
。