[英]@KafkaListener with multiples independent topics processing
Software used:使用的软件:
I have this method in my spring:我在春天有这个方法:
@KafkaListener(topics="#{consumerSpring.topics}", groupId="#{consumerSpring.consumerId}", concurrency="#{consumerSpring.recommendedConcurrency}")
public void listenKafkbooiaTopic(@Header(KafkaHeaders.RECEIVED_TOPIC) String topicName, @Payload String message, Acknowledgment ack) throws Exception {
ConsumerSpring consumer = this.consumerSpring();
//
//
KafkaHandlerReturn handlerReturn = consumer.getKafkaProxy().handleRequest(
topicName,
consumer.getConsumerId(),
message);
if (handlerReturn.equals(KafkaHandlerReturn.SUCCESS) || handlerReturn.equals(KafkaHandlerReturn.FAIL_LOGIC)) {
ack.acknowledge();
} else {
ack.nack(5 * 1000);
}
}
#{consumerSpring.topics}
returns #{consumerSpring.topics}
返回
{"topic1", "topic2", "topic3"}
#{consumerSpring.consumerId}
returns: #{consumerSpring.consumerId}
返回:
myConsumer
#{consumerSpring.recommendedConcurrency}
returns: #{consumerSpring.recommendedConcurrency}
返回:
3
OK!好的! This is working fine!这工作正常! But I need isolate these topics, for example:但我需要隔离这些主题,例如:
TopicA is stuck in fatal error and it's calling: TopicA 陷入致命错误,它正在调用:
ack.nack(5 * 1000);
But the topics: TopicB and TopicC aren't stuck.但是主题:TopicB 和 TopicC 并没有被卡住。 Then I need that these topics continue the execution normally.然后我需要这些主题继续正常执行。
Basically I need the same behavior as if I declared two separate structures, example:基本上我需要与声明两个独立结构相同的行为,例如:
@KafkaListener(topics="topica", groupId="#{consumerSpring.consumerId}")
public void listenerTopicB(@Header(KafkaHeaders.RECEIVED_TOPIC) String topicName, @Payload String message, Acknowledgment ack) throws Exception {
ConsumerSpring consumer = this.consumerSpring();
//
//
KafkaHandlerReturn handlerReturn = consumer.getKafkaProxy().handleRequest(
topicName,
consumer.getConsumerId(),
message);
if (handlerReturn.equals(KafkaHandlerReturn.SUCCESS) || handlerReturn.equals(KafkaHandlerReturn.FAIL_LOGIC)) {
ack.acknowledge();
} else {
ack.nack(5 * 1000);
}
}
@KafkaListener(topics="topicb", groupId="#{consumerSpring.consumerId}")
public void listenerTopicA(@Header(KafkaHeaders.RECEIVED_TOPIC) String topicName, @Payload String message, Acknowledgment ack) throws Exception {
ConsumerSpring consumer = this.consumerSpring();
//
//
KafkaHandlerReturn handlerReturn = consumer.getKafkaProxy().handleRequest(
topicName,
consumer.getConsumerId(),
message);
if (handlerReturn.equals(KafkaHandlerReturn.SUCCESS) || handlerReturn.equals(KafkaHandlerReturn.FAIL_LOGIC)) {
ack.acknowledge();
} else {
ack.nack(5 * 1000);
}
}
There is no need for multiple methods.不需要多种方法。
You can put multiple @KafkaListener
annotations on a single method and each one will create a separate container.您可以将多个@KafkaListener
注释放在一个方法上,每个注释都将创建一个单独的容器。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.