gpt4 book ai didi

Spring-Kafka:如何在 Producer Kafka 中插入一个 application.yml 主题

转载 作者:行者123 更新时间:2023-12-01 23:29:58 25 4
gpt4 key购买 nike

我有一个 spring-kafka 微服务,我最近向它添加了一个死信,以便能够发送各种错误消息

//some code..
@Component
public class KafkaProducer {
@Autowired
private KafkaTemplate<String, String> kafkaTemplate;

public void sendDeadLetter(String message) {
kafkaTemplate.send("myDeadLetter", message);
}
}

我想将死信的主题kafka称为“messageTopic”+“_deadLetter”,我的主要主题是“messageTopic”。在我的 Consumer 中,主题名称给他 application.yml 如下:

@KafkaListener(topics = "${spring.kafka.topic.name}")

如何通过从 application.yml 中插入“+ deadLetter”来设置相同的 kafka 主题?我试过这样的事情:

@Component
@KafkaListener(topics = "${spring.kafka.topic.name}"+"_deadLetter")
public class KafkaProducer {
@Autowired
private KafkaTemplate<String, String> kafkaTemplate;

public void sendDeadLetter(String message) {
kafkaTemplate.send("messageTopic_deadLetter", message);
}
}

但它为我创建了两个同名的不同主题。我正在等待一些建议,感谢您的帮助!

最佳答案

Kafka Listener 接受 Topic 名称的常量,我们不能在这里修改 TOPIC 名称。

最好为实际主题和死信主题使用单独的方法(Kafka 监听器),在 YAML 中定义两个不同的属性以保存两个主题名称。

@KafkaListener(topics = "${spring.kafka.topic.name}")
public void listen(......){

}

@KafkaListener(topics = "${spring.kafka.deadletter.topic.name}")
public void listenDlt(......){

}

enter image description here

从 yml 或属性文件中引用 send(...) 中的主题名称

@Component
@KafkaListener(topics = "${spring.kafka.deadletter.topic.name}")
public class KafkaProducer {

@Value("${spring.kafka.deadletter.topic.name}")
private String DLT_TOPIC_NAME;

@Autowired
private KafkaTemplate<String, String> kafkaTemplate;

public void sendDeadLetter(String message) {
kafkaTemplate.send(DLT_TOPIC_NAME, message);
}
}

关于Spring-Kafka:如何在 Producer Kafka 中插入一个 application.yml 主题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66449529/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com