Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring integration 使用带有spring集成和spring kafka的嵌入式Kafkabroker_Spring Integration_Spring Kafka - Fatal编程技术网

Spring integration 使用带有spring集成和spring kafka的嵌入式Kafkabroker

Spring integration 使用带有spring集成和spring kafka的嵌入式Kafkabroker,spring-integration,spring-kafka,Spring Integration,Spring Kafka,我想使用EmbeddedKafkaBroker来测试涉及KafkaMessageDrivenChannelAdapter, 看起来消费者启动正确,订阅了主题,但将消息推送到EmbeddedKafkaBroker后,处理程序不会触发 @SpringBootTest(properties = {"...."}, classes = {....class}) @EmbeddedKafka class IntTests { @BeforeAll static void setu

我想使用
EmbeddedKafkaBroker
来测试涉及
KafkaMessageDrivenChannelAdapter

看起来消费者启动正确,订阅了主题,但将消息推送到
EmbeddedKafkaBroker
后,处理程序不会触发

@SpringBootTest(properties = {"...."},  classes = {....class})
@EmbeddedKafka
class IntTests {
 @BeforeAll
 static void setup() {
    embeddedKafka = new EmbeddedKafkaBroker(1, true, TOPIC);
    embeddedKafka.kafkaPorts(57412);
    embeddedKafka.afterPropertiesSet();
 }

 @Test
 void testit() throws InterruptedException {
    String ip = embeddedKafka.getBrokersAsString();
    Map<String, Object> configs = new HashMap<>(KafkaTestUtils.producerProps(embeddedKafka));
    Producer<String, String> producer = new DefaultKafkaProducerFactory<>(configs, new StringSerializer(), new StringSerializer()).createProducer();
        // Act
    producer.send(new ProducerRecord<>(TOPIC, "key", "{\"name\":\"Test\"}"));
    producer.flush();

    ....

}
...
}

拥有
embeddedKafka=新的EmbeddedKafkaBroker(1,true,TOPIC)
@EmbeddedKafka
,基本上可以启动两个独立的Kafka集群。如果要更改嵌入式代理的随机端口,请参阅
@EmbeddedKafka
端口
选项。但同时,更好地依赖于Spring Boot为我们提供的自动配置

有关更多信息,请参阅文档:。请注意bootstrapServersProperty=“spring.kafka.bootstrap服务器”属性

更新


在您的测试中,您有这个
@SpringBootTest(classes={Kafka.class})
。当我删除
classes
属性时,一切都开始工作了。问题在于,您的配置类不支持自动配置,因此您没有正确初始化Spring集成,并且消息没有从通道中使用。可能还有其他影响。但仍然:最好依靠自动配置,所以让您的测试看看
@SpringBootApplication
注释。

删除了`新的EmbeddedKafkaBroker
,当我推送消息时仍然没有触发处理程序。可能是因为我使用了
Thread.Sleep`推后?不确定发生了什么。有没有机会和我们分享一个简单的项目,让我们复制和玩?非常简单的例子,2个Java,请看我答案中的更新。哇,这太简单了
    @Configuration
    public class Kafka {

   
    
     @Bean
     public KafkaMessageDrivenChannelAdapter<String, String> adapter(KafkaMessageListenerContainer<String, String> container) {
        KafkaMessageDrivenChannelAdapter<String, String> kafkaMessageDrivenChannelAdapter =..
        kafkaMessageDrivenChannelAdapter.setOutputChannelName("kafkaChannel");

     }
    
     @Bean
     public KafkaMessageListenerContainer<String, String> container() {
        ContainerProperties properties = new ContainerProperties(TOPIC);        
        KafkaMessageListenerContainer<String, String> kafkaContainer = ...;
        return kafkaContainer;
     }
    
    
     @Bean
     public ConsumerFactory<String, String> consumerFactory() {
       Map<String, Object> props = new HashMap<>();
       props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, "127.0.0.1:57412");
       props.put(ConsumerConfig.GROUP_ID_CONFIG, "group12");
    
       ...
           
       return new DefaultKafkaConsumerFactory<>(props); 
     }
    

    @Bean
    public PublishSubscribeChannel kafkaChannel() {
        return new PublishSubscribeChannel ();
    }

   @Bean
    @ServiceActivator(inputChannel = "kafkaChannel")
    public MessageHandler handler() {
        return new MessageHandler() {
            @Override
            public void handleMessage(Message<?> message) throws MessagingException {
                
            }
        };
    }
    ...
    
    }
clients.consumer.KafkaConsumer     : [Consumer clientId=consumer-group12-1, groupId=group12] Subscribed to topic(s): TOPIC
ThreadPoolTaskScheduler          : Initializing ExecutorService
KafkaMessageDrivenChannelAdapter : started bean 'adapter'; defined in: 'com.example.demo.demo.Kafka';