alf*_*wef 4 java spring apache-kafka spring-boot spring-kafka
我希望在仅允许 Kafka 由上述应用程序运行的环境中部署一个 Spring Boot 应用程序。我的应用程序将成为 Kafka 生产者和消费者。有没有办法在启动时运行内存实例,该实例可用于测试以外的目的?或者,有没有一种方法可以启动一个 Spring Boot 应用程序,如果它无法作为生产者和消费者连接到 Kafka,该应用程序也不会失败?
编辑:这是一个临时解决方案,直到我们能够在此环境中部署 Kafka 为止。该应用程序不生成和使用自己的记录。它是多应用程序部署的一部分,其中每个应用程序都为其他应用程序生成并使用其他应用程序 Kafka 主题。我看到很多关于消费者无法使用 Kafka 时应用程序启动的信息,但关于生产者的信息却很少。我的应用程序将同时执行这两项操作。
这样的应用程序的目的是什么(生成和使用自己的记录)?嵌入式代理不适用于生产用途。
从版本 2.3.4 开始,容器属性missingTopicsFatal
默认为 false,这将允许容器在代理不可用时启动。对于早期版本,您可以将其设置为 false 以获得相同的效果。
如果为 true,容器会在启动期间连接到代理以验证主题是否存在。
您还可以设置容器autoStartup=false
以防止容器完全启动。
编辑
我不建议在生产中使用它,但您可以test
从中删除范围spring-kafka-test
并将代理声明为@Bean
...
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka-test</artifactId>
<!-- <scope>test</scope> -->
</dependency>
Run Code Online (Sandbox Code Playgroud)
@Bean
EmbeddedKafkaBroker broker() {
return new EmbeddedKafkaBroker(1)
.kafkaPorts(9092)
.brokerListProperty("spring.kafka.bootstrap-servers"); // override application property
}
Run Code Online (Sandbox Code Playgroud)
我刚刚用这个应用程序测试过...
@SpringBootApplication
public class So63812994Application {
public static void main(String[] args) {
SpringApplication.run(So63812994Application.class, args);
}
@Bean
EmbeddedKafkaBroker broker() {
return new EmbeddedKafkaBroker(1)
.kafkaPorts(9092)
.brokerListProperty("spring.kafka.bootstrap-servers");
}
@Bean
public NewTopic topic() {
return TopicBuilder.name("so63812994").partitions(1).replicas(1).build();
}
@KafkaListener(id = "so63812994", topics = "so63812994")
public void listen(String in) {
System.out.println(in);
}
@Bean
public ApplicationRunner runner(KafkaTemplate<String, String> template) {
return args -> {
template.send("so63812994", "foo");
};
}
}
Run Code Online (Sandbox Code Playgroud)
spring.kafka.bootstrap-servers=realKafka:9092
spring.kafka.consumer.auto-offset-reset=earliest
Run Code Online (Sandbox Code Playgroud)
编辑2
通过上述配置,同一主机上的其他应用程序可以与localhost:9092
.
如果您需要远程访问此嵌入式代理,则需要一些额外的配置:
spring.kafka.bootstrap-servers=realKafka:9092
spring.kafka.consumer.auto-offset-reset=earliest
Run Code Online (Sandbox Code Playgroud)
然后您可以从其他服务器使用 进行连接10.0.0.20:9093
。
归档时间: |
|
查看次数: |
8031 次 |
最近记录: |