当前位置: 首页 > 知识库问答 >
问题:

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

皇甫敏达
2023-03-14
//some code..
@Component
public class KafkaProducer {
    @Autowired
    private KafkaTemplate<String, String> kafkaTemplate;

    public void sendDeadLetter(String message) {
        kafkaTemplate.send("myDeadLetter", message);
    }
}
@KafkaListener(topics = "${spring.kafka.topic.name}")

我如何通过可能从application.yml中插入“+死信”来设置相同的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);
    }
}

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

共有1个答案

郭永怡
2023-03-14

Kafka监听器接受常量作为主题名,我们不能在这里修改主题名。

理想情况下,对于实际主题和死信主题,最好使用单独的方法(Kafka侦听器),在YAML中定义两个不同的属性来保存两个主题名。

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

}

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

}

在发送(...)中引用主题名称从yml或属性文件

@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);
    }
}
 类似资料:
  • 我有一个问题,我做了一个apache kafka消费者在Spring Boot消费3个不同的主题。但是我需要先使用来自第一个主题的所有数据,然后使用来自以下主题的数据,有什么方法可以做到这一点吗?还是你总是用同样的方式读它们?

  • Spring Boot-从application.yml注入映射 在这个问题上,他们 为了将其映射到java代码中,他们建议使用注释。这个注释的问题是,您必须创建一个,然后在上面添加这个注释。 这样说我需要它: 上面的代码应该给出一个映射,其中key是,value是等字段的对象(当然,如果这样做有效,我将为此创建一个POJO,而不是将其作为普通对象)。 注意:对字段不起作用,这就是为什么我想看看是

  • 下面是创建表的脚本:

  • 然后,我对一个方法使用了注释,该方法执行以下操作: 这不起作用。是事务性的,但是当调用方法时,没有正在进行的事务,并且我得到一个。 我打算尝试方法,但Javadoc声明这只用于本地事务,因此它似乎不符合我的需要。 我的下一步是尝试直接使用Kafka的Producer API,看看这种模式是否有效,但如果有人能告诉我知道我在浪费时间,Kafka不支持事务性地写多个主题,我会很感激。 我确实在Conf

  • 问题内容: 我需要在kafka-0.8.2.2.3中删除一个主题。我已使用以下命令删除该主题: 该命令已成功执行,但是当我运行命令以列出主题时,我可以看到该主题仍然存在,并且显示 标记为“删除” 。 当我创建主题DummyTopic时,它会输出异常,该主题已存在,下面是堆栈跟踪: 请让我知道如何删除该主题。 问题答案: 从0.8.2.x版本开始支持删除主题。您必须首先在所有代理上启用主题删除(设置

  • 该文档说明:https://docs.spring.io/spring/docs/current/spring-framework-reference/web-reactive.html ServerResponse提供对HTTP响应的访问。由于ServerResponse是不可变的,因此使用构建器创建ServerResponse。生成器允许您设置响应状态、添加响应标头和提供正文。例如,以下是如何