[英]@KafkaListener with multiples independent topics processing
使用的軟件:
我在春天有這個方法:
@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}
返回
{"topic1", "topic2", "topic3"}
#{consumerSpring.consumerId}
返回:
myConsumer
#{consumerSpring.recommendedConcurrency}
返回:
3
好的! 這工作正常! 但我需要隔離這些主題,例如:
TopicA 陷入致命錯誤,它正在調用:
ack.nack(5 * 1000);
但是主題:TopicB 和 TopicC 並沒有被卡住。 然后我需要這些主題繼續正常執行。
基本上我需要與聲明兩個獨立結構相同的行為,例如:
@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);
}
}
不需要多種方法。
您可以將多個@KafkaListener
注釋放在一個方法上,每個注釋都將創建一個單獨的容器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.