Spring integration 基于路由器条件的SI-kafka消息流
要求:希望在inMessageHandler中接收/处理inMessage,在emailMessageHandler中接收/处理emailMessage 问题:(如果消费者配置的消费者组id不同)消息在这两种情况下一直流动到ConsumerServiceHandler的转换方法,但在emailMessageHandler中的emailMessage中没有得到它。(但在inMessageHandler中针对inMessage) 问题:(如果消费者配置的消费者组id相同)消息正在从ConsumerServiceHandler的转换方法流到emailMessageHandler中的emailMessage,但在inMessageHandler中根本没有接收到inMessage(甚至在ConsumerServiceHandler的转换方法中也没有) 您能告诉我这里有什么问题吗?我如何根据主题id在不同的服务类别上接收不同的消息进行处理 请在下面找到配置Spring integration 基于路由器条件的SI-kafka消息流,spring-integration,apache-kafka,Spring Integration,Apache Kafka,要求:希望在inMessageHandler中接收/处理inMessage,在emailMessageHandler中接收/处理emailMessage 问题:(如果消费者配置的消费者组id不同)消息在这两种情况下一直流动到ConsumerServiceHandler的转换方法,但在emailMessageHandler中的emailMessage中没有得到它。(但在inMessageHandler中针对inMessage) 问题:(如果消费者配置的消费者组id相同)消息正在从ConsumerS
<int-kafka:producer-context id="kafkaProducerContext">
<int-kafka:producer-configurations>
<int-kafka:producer-configuration broker-list="localhost:9092"
key-class-type="java.lang.String"
value-class-type="com.test.EmailMessageVo"
topic="emailMessag_topic"
value-encoder="emailvalueEncoder"
key-encoder="kafkaSerializer"
compression-type="none"/>
<int-kafka:producer-configuration broker-list="localhost:9092"
key-class-type="java.lang.String"
value-class-type="com.test.InMessageVo"
topic="inMessage_topic"
value-encoder="invalueEncoder"
key-encoder="kafkaSerializer"
compression-type="none"/>
</int-kafka:producer-configurations>
</int-kafka:producer-context>
<bean id="invalueEncoder" class="org.springframework.integration.kafka.serializer.avro.AvroReflectDatumBackedKafkaEncoder">
<constructor-arg value="com.test.InMessageVo" />
您应该与我们分享您的
ConsumerServiceHandler
的功能。只是因为您的逻辑有点奇怪,将
的结果作为消息
,其中它是一条消息,带有
payload`作为主题及其消息的分区映射
使用相同的组id
我们(您?)最终会遇到这样一个问题,即最后一个配置将覆盖上一个配置:
consumerConfigurationsMap.put(consumerConfiguration.getAttribute("group-id"),
consumerConfigurationBeanDefinition);
您应该与我们分享您的
ConsumerServiceHandler
的功能。只是因为您的逻辑有点奇怪,将
的结果作为消息
,其中它是一条消息,带有
payload`作为主题及其消息的分区映射
使用相同的组id
我们(您?)最终会遇到这样一个问题,即最后一个配置将覆盖上一个配置:
consumerConfigurationsMap.put(consumerConfiguration.getAttribute("group-id"),
consumerConfigurationBeanDefinition);
感谢@ArtemBilan的友好回复。请在此处找到consumerServiceHandler:consumerServiceHandler:删除主题/分区冗余详细信息/设置主题。发送的消息:Message.withPayload(inMessageVO)/Message.withPayload(emailMessageVO),期望相同,但格式如下:消息总体意图:将不同的消息(inMessageVO/emailMessageVO)路由到不同的处理程序进行处理,请建议,如果可以以更好的方式完成。感谢@ArtemBilan的友好响应,请在此处找到consumerServiceHandler:consumerServiceHandler:删除主题/分区冗余详细信息/设置主题。已发送消息:Message.withPayload(inMessageVO)/Message.withPayload(emailMessageVO),期望相同,但格式如下:消息总体意图:将不同的消息(inMessageVO/emailMessageVO)路由到不同的处理程序进行处理。如果可以以更好的方式进行处理,请提出建议。
<int:channel id="emailMessage_topic_channel">
<int:queue />
<bean id="inMessageService" class="com.test.inMessageHandler" />
<bean id="emailMessageService" class="com.test.emailMessageHandler" />
<int:service-activator id="advicedSa1" input-channel="inMessage_topic_channel" ref="inMessageService"method="execute">
<int:service-activator id="advicedSa2" input-channel="emailMessage_topic_channel" ref="emailMessageService"method="execute" >
<int:router input-channel="receiveMessageFromKafka" expression="headers.topic">
<int:mapping value="inMessage_topic" channel="inMessage_topic_channel"/>
<int:mapping value="emailMessage_topic" channel="emailMessage_topic_channel"/>
consumerConfigurationsMap.put(consumerConfiguration.getAttribute("group-id"),
consumerConfigurationBeanDefinition);