springboot中简单的接收和发送Kafka消息

本文展示了如何在SpringBoot应用中使用配置文件设置Kafka,包括生产者和消费者的代码示例,详细解释了如何进行消息的发送与接收。

话不多说,上代码:

首先是配置文件,这里用了yml:

spring:
  # kafka
  kafka:
    bootstrap-servers: xxx.xxx.x.xx:9092
    producer:
      key-serializer: org.apache.kafka.common.serialization.StringSerializer
      value-serializer: org.apache.kafka.common.serialization.StringSerializer
    consumer:
      group-id: egcc
      enable-auto-commit: true
      auto-commit-interval: 1000
      key-serializer: org.apache.kafka.common.serialization.StringSerializer
      value-serializer: org.apache.kafka.common.serialization.StringSerializer
      # earliest latest
      auto-offset-reset: latest

生产者:

@Component
public class KafkaProducer {

    @Autowired
    private KafkaTemplate<String, String> kafkaTemplate;

    public String send(String topic, String msg) {
        kafkaTemplate.send(topic, msg);
        return "success";
    }

}

消费者:

@Component
public class KafkaConsumer {

    @KafkaListener(topics = "test")
    public void listen(ConsumerRecord<?, ?> record) throws Exception {
        System.out.printf("topic = %s, offset = %d, value = %s \n", record.topic(), record.offset(), record.value());
    }

}

 

### 测试环境中的Kafka消息发送接收 为了在Spring Boot测试环境中有效地模拟Kafka消息发送接收,推荐的方法是利用嵌入式的Kafka服务器。这种方式允许开发者在一个隔离的环境下运行完整的端到端测试而无需依赖外部服务实例。通过`spring-kafka-test`库可以方便地实现这一点。 #### 使用Embedded Kafka进行单元测试 引入必要的依赖项以便能够使用内嵌Kafka功能: ```xml <dependency> <groupId>org.springframework.kafka</groupId> <artifactId>spring-kafka-test</artifactId> <scope>test</scope> </dependency> ``` 定义一个配置类来启动嵌入式Kafka broker并设置相应的监听器容器工厂其他组件[^1]。 ```java @TestConfiguration public class EmbeddedKafkaConfig { @Value("${embedded.kafka.brokers}") private String embeddedKafkaBrokers; @Bean public Map<String, Object> consumerConfigs() { Map<String, Object> props = new HashMap<>(); props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, embeddedKafkaBrokers); // 添加其他消费者配置... return props; } @Bean public ConsumerFactory<String, String> consumerFactory() { return new DefaultKafkaConsumerFactory<>(consumerConfigs()); } } ``` 编写具体的测试案例以验证消息传递逻辑的工作情况。下面是一个简单的例子展示如何发送一条消息并通过监听器接收到它[^4]。 ```java @SpringBootTest(classes = Application.class, webEnvironment = WebEnvironment.RANDOM_PORT) @DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD) @EmbeddedKafka(partitions = 1, topics = {"reminder_topic"}) class KafkaIntegrationTest { @Autowired private KafkaTemplate<String, String> kafkaTemplate; @LocalServerPort private int port; @Test void testSendMessageAndReceive() throws Exception { RestTemplate restTemplate = new RestTemplate(); // 发送POST请求触发消息生产者行为 ResponseEntity<String> responseEntity = restTemplate.postForEntity("http://localhost:" + port + "/kafka/normal/testMessage", null, String.class); assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.OK); // 验证消息被成功消费 ListenableFuture<ConsumerRecord<String, String>> future = KafkaTestUtils.getSingleRecord(consumerFactory(), "reminder_topic"); ConsumerRecord<String, String> record = future.get(30, TimeUnit.SECONDS); assertEquals("testMessage", record.value()); } private ConsumerFactory<String, String> consumerFactory(){ Map<String, Object> configs = new HashMap<>(); configs.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, embeddedKafka.getBrokersAsString()); return new DefaultKafkaConsumerFactory<>(configs); } } ``` 上述代码片段展示了如何结合RESTful API调用来激活消息生产随后的消息消费过程。这有助于确保整个流程按预期工作,并且可以在本地开发机器上快速迭代而不必担心影响实际的服务部署。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值