Springboot整合kafka实现高效的消息传递和处理

这篇具有很好参考价值的文章主要介绍了Springboot整合kafka实现高效的消息传递和处理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


Kafka是一个分布式的流处理平台,它可以处理高吞吐量的消息。Spring Boot是一个流行的Java开发框架,提供了快速构建应用程序的能力。将这两者结合起来可以实现高效的消息传递和处理,同时支持多种消息模式。

springboot发送kafka消息,Spring-Boot,MQ,kafka,spring boot,java

本篇博客将介绍如何使用Spring Boot整合Kafka,并支持多种消息模式。

1. 环境准备

在开始之前,我们需要确保以下几点:

  • 安装Java JDK 8或更高版本
  • 安装Maven 3.0或更高版本
  • 安装Kafka

2. Spring Boot整合Kafka

2.1 添加依赖

在pom.xml文件中添加以下依赖:

<dependency>
    <groupId>org.springframework.kafka</groupId>
    <artifactId>spring-kafka</artifactId>
    <version>2.8.1</version>
</dependency>

2.2 配置Kafka

在application.properties中添加以下配置:

spring.kafka.bootstrap-servers=localhost:9092
spring.kafka.consumer.group-id=my-group
spring.kafka.consumer.auto-offset-reset=earliest

spring:
    kafka:
        bootstrap-servers:localhost:9092
        consumer:
            group-id:my-group
            auto-offset-reset:earliest

2.3 创建Producer

创建一个KafkaProducerConfig类,配置生产者:

@Configuration
@EnableKafka
public class KafkaProducerConfig {

    @Bean
    public ProducerFactory<String, String> producerFactory() {
        Map<String, Object> configProps = new HashMap<>();
        configProps.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");
        configProps.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
        configProps.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
        return new DefaultKafkaProducerFactory<>(configProps);
    }

    @Bean
    public KafkaTemplate<String, String> kafkaTemplate() {
        return new KafkaTemplate<>(producerFactory());
    }
}

创建一个KafkaProducer类,发送消息:

@Service
public class KafkaProducer {

    @Autowired
    private KafkaTemplate<String, String> kafkaTemplate;

    public void sendMessage(String topic, String message) {
        kafkaTemplate.send(topic, message);
    }
}

2.4 创建Consumer

创建一个KafkaConsumerConfig类,配置消费者:

@Configuration
@EnableKafka
public class KafkaConsumerConfig {

    @Bean
    public ConsumerFactory<String, String> consumerFactory() {
        Map<String, Object> props = new HashMap<>();
        props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");
        props.put(ConsumerConfig.GROUP_ID_CONFIG, "my-group");
        props.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, "earliest");
        props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
        props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
        return new DefaultKafkaConsumerFactory<>(props);
    }

    @Bean
    public ConcurrentKafkaListenerContainerFactory<String, String> kafkaListenerContainerFactory() {
        ConcurrentKafkaListenerContainerFactory<String, String> factory =
                new ConcurrentKafkaListenerContainerFactory<>();
        factory.setConsumerFactory(consumerFactory());
        return factory;
    }
}

创建一个KafkaConsumer类,处理消息:

@Service
public class KafkaConsumer {

    @KafkaListener(topics = "my-topic")
    public void receive(String message) {
        System.out.println("Received message: " + message);
    }
}

2.5 发送和接收消息

使用KafkaProducer发送消息:

@Autowired
private KafkaProducer kafkaProducer;

@GetMapping("/send/{message}")
public String sendMessage(@PathVariable String message) {
    kafkaProducer.sendMessage("my-topic", message);
    return "Message sent successfully";
}

使用KafkaConsumer接收消息:

@Autowired
private KafkaConsumer kafkaConsumer;

3. 支持多种消息模式

Kafka支持多种消息模式,例如点对点模式、发布-订阅模式和批处理模式。下面将介绍如何使用Spring Boot实现这些模式。

3.1 点对点模式

在点对点模式下,每个消息只会被一个消费者处理。如果有多个消费者监听同一个主题,那么这些消费者会竞争处理消息。

在Spring Boot中,可以通过设置@KafkaListener注解的id属性来标识一个消费者实例。当有多个消费者监听同一个主题时,每个消费者实例都会接收到一部分消息。

例如,我们创建两个消费者实例:

@Service
public class KafkaConsumer1 {

    @KafkaListener(id = "consumer1", topics = "my-topic")
    public void receive(String message) {
        System.out.println("Consumer1 received message: " + message);
    }
}

@Service
public class KafkaConsumer2 {

    @KafkaListener(id = "consumer2", topics = "my-topic")
    public void receive(String message) {
        System.out.println("Consumer2 received message: " + message);
    }
}

在这个例子中,我们通过id属性为每个消费者实例指定了一个唯一的标识符。当有消息发送到my-topic主题时,每个消费者实例都会接收到一部分消息。

3.2 发布-订阅模式

在发布-订阅模式下,每个消息都会被所有的消费者处理。如果有多个消费者监听同一个主题,那么这些消费者都会接收到相同的消息。

在Spring Boot中,可以使用@KafkaListener注解的groupId属性来指定一个消费者组。当有消息发送到主题时,该消费者组中的每个消费者实例都会接收到相同的消息。

例如,我们创建两个消费者实例:

@Service
public class KafkaConsumer1 {

    @KafkaListener(groupId = "my-group", topics = "my-topic")
    public void receive(String message) {
        System.out.println("Consumer1 received message: " + message);
    }
}

@Service
public class KafkaConsumer2 {

    @KafkaListener(groupId = "my-group", topics = "my-topic")
    public void receive(String message) {
        System.out.println("Consumer2 received message: " + message);
    }
}

在这个例子中,我们通过groupId属性指定消费者组的名称为my-group,这两个消费者实例都属于这个消费者组。当有消息发送到my-topic主题时,这个消费者组中的每个消费者实例都会接收到相同的消息。

3.3 批处理模式

在批处理模式下,消费者一次性消费多个消息。可以通过设置@KafkaListener注解的containerFactory属性来实现批处理模式。

Spring Boot提供了一个ConcurrentKafkaListenerContainerFactory类,该类可以用来创建支持批处理的消费者实例。

例如,我们可以创建一个支持批处理的消费者:

@Service
public class KafkaBatchConsumer {

    @KafkaListener(topics = "my-topic", containerFactory = "batchFactory")
    public void receive(List<String> messages) {
        System.out.println("Received batch of messages:");
        messages.forEach(System.out::println);
    }
}

在这个例子中,我们通过containerFactory属性指定使用batchFactory工厂类创建消费者实例。batchFactory工厂类会创建支持批处理的消费者实例,该实例会将多个消息一起处理。

4. 总结

本文介绍了如何使用Spring Boot整合Kafka,并支持多种消息模式。首先我们配置了Kafka的生产者和消费者,然后介绍了点对点模式、发布-订阅模式和批处理模式的实现方式。

Kafka作为一个高可靠、高性能、分布式的消息系统,已经被广泛应用于各种场景中。通过使用Spring Boot整合Kafka,可以快速方便地构建基于Kafka的分布式应用程序。文章来源地址https://www.toymoban.com/news/detail-702749.html

到了这里,关于Springboot整合kafka实现高效的消息传递和处理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SpringBoot整合消息中间件(ActiveMQ,RabbitMQ,RocketMQ,Kafka)

    消息的发送方:生产者 消息的接收方:消费者 同步消息:发送方发送消息到接收方,接收方有所回应后才能够进行下一次的消息发送 异步消息:不需要接收方回应就可以进行下一步的发送 什么是消息队列? 当此时有很多个用户同时访问服务器,需要服务器进行操作,但此

    2024年04月27日
    浏览(52)
  • Springboot Kafka整合(开发实例、连接、配置TOPICS、发送消息)—官方原版

    Spring for Apache Kafka项目将Spring的核心概念应用于基于Kafka的消息传递解决方案的开发。我们提供了一个“模板”作为发送消息的高级抽象。 本快速教程适用于以下版本: Apache Kafka 客户端 3.3.x Spring Framework 6.0.x 最低 Java 版本:17 以下是一个不使用Spring Boot的应用程序示例;它既

    2024年02月06日
    浏览(65)
  • Springboot最简单的实战介绍 整合kafka-生产者与消费者(消息推送与订阅获取)

    #spring.kafka.bootstrap-servers=123.xxx.x.xxx:19092,123.xxx.x.xxx:19093,123.xxx.x.xxx:19094 spring.kafka.bootstrap-servers=192.168.x.xxx:9092 #=============== producer生产者 ======================= spring.kafka.producer.retries=0 spring.kafka.producer.batch-size=16384 spring.kafka.producer.buffer-memory=33554432 spring.kafka.producer.key-serializer=org.ap

    2024年04月09日
    浏览(49)
  • 搭建RabbitMQ消息服务,整合SpringBoot实现收发消息

    作者主页 :Designer 小郑 作者简介 :3年JAVA全栈开发经验,专注JAVA技术、系统定制、远程指导,致力于企业数字化转型,CSDN博客专家,蓝桥云课认证讲师。 消息队列是一种在应用程序之间传递数据的通信机制 ,它基于 发布-订阅 模式,将消息发送者(发布者)和消息接收者

    2024年02月09日
    浏览(57)
  • SpringBoot整合websockt实现消息对话

    WebSocket是一种在Web应用程序中实现实时双向通信的技术。Web应用程序通常是基于HTTP协议的,HTTP是一种请求/响应式的协议,客户端发起请求,服务器响应请求并发送响应,客户端收到响应后关闭连接。这意味着,如果客户端需要不断地从服务器获取更新,它必须定期发送请求

    2024年02月09日
    浏览(40)
  • springboot整合rabbitmq 实现消息发送和消费

    Spring Boot提供了RabbitMQ的自动化配置,使得整合RabbitMQ变得非常容易。 首先,需要在pom.xml文件中引入amqp-client和spring-boot-starter-amqp依赖: 接下来需要在application.properties文件中配置RabbitMQ连接信息: 然后编写消息发送者: 其中,my-exchange和my-routing-key是需要自己定义的交换机和

    2024年02月07日
    浏览(42)
  • SpringBoot整合Netty+Websocket实现消息推送

           Netty是一个高性能、异步事件驱动的网络应用框架,用于快速开发可维护的高性能协议服务器和客户端。以下是Netty的主要优势: 高性能 :Netty基于NIO(非阻塞IO)模型,采用事件驱动的设计,具有高性能的特点。它通过零拷贝技术、内存池化技术等手段,进一步提高

    2024年01月20日
    浏览(45)
  • SpringBoot - SpringBoot整合i18n实现消息国际化

    在我们开发WEB项目的时候,项目可能涉及到在国外部署或者应用,也有可能会有国外的用户对项目进行访问,那么在这种项目中, 为客户展现的页面或者操作的信息就需要根据客户系统的环境来使用不同的语言,这就是我们所说的项目国际化。 1. MessageSource源码 Spring中定义了

    2024年02月03日
    浏览(51)
  • Springboot整合WebSocket实现主动向前端推送消息

            在上篇文章tcp编程中,我们实现了C++客户端与java服务器之间的通信,客户端发送了一个消息给服务器,今天我们要实现基于WebSocket实现服务器主动向前端推送消息,并且以服务器接收到C++客户端的消息主动向前端推送消息的触发条件。 WebSocket 的诞生背景       

    2024年03月16日
    浏览(42)
  • springboot~kafka中延时消息的实现

    用户下单5分钟后,给他发短信 用户下单30分钟后,如果用户不付款就自动取消订单 kafka本身没有这种延时队列的机制,像rabbitmq有自己的死信队列,当一些消息在一定时间不消费时会发到死信队列,由死信队列来处理它们,上面的两个需求如果是rabbitmq可以通过死信队列实现的

    2024年02月12日
    浏览(81)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包