Spring Boot—11、消息传递

本文详细介绍了Spring Framework如何集成JMS、AMQP(RabbitMQ)和Apache Kafka进行消息传递。通过实例展示了发送和接收消息的方法,并提供了相关依赖配置。同时,提到了ActiveMQ作为JMS实现和Kafka Streams的使用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Spring Framework为消息传递的集成提供了广泛的支持,从一开始的使用JMA API的JmsTemplate到异步接收消息的完整基础结构。

Spring AMQP为高级消息队列协议提供了类似的功能集。

Spring Boot为RabbitTemplate和RabbitMQ提供了自动配置选项

Spring WebSocket本身包含对STOMP消息传递的支持

Spring Boot也支持Apache Kafka。

1. JMS

javax.jms.ConnectionFactory接口提供了创建javax.jms.connection的标准方法用于与JMS代理进行交互。

1.1. ActiveMQ

Apache ActiveMQ是Apache软件基金会所研发的开放源代码消息中间件;由于ActiveMQ是一个纯Java程序,因此只需要操作系统支持Java虚拟机,ActiveMQ便可执行。
具体操作可参考Spring Boot ActiveMQ

1.2. Artemis(暂未完善)

1.3. JNDI ConnectionFactory(暂未完善)

1.4. 发送消息

使用jmsMessagingTemplate发送消息

 this.jmsMessagingTemplate.convertAndSend(this.queue,"Queue Send");

1.5. 接收消息

使用@JmsListener注解接收消息

@JmsListener(destination = "${spring.activemq.queue-name}",containerFactory = "queueListener")

2. AMQP

高级消息队列协议(AMQP)是面向消息的中间件的平台中立的线级协议.
具体可参考文章:Spring Boot RabbitMQ

2.1. RabbitMQ

添加依赖项:

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-amqp</artifactId>
</dependency>

2.2. 发送消息

使用RabbitTemplate发送消息:

 rabbitTemplate.convertAndSend(AppConstants.EXCHANGE,AppConstants.ROUTINGKEY,msg);

2.3. 接收消息

通过@RabbitListenter监听队列

  @RabbitHandler
    @RabbitListener(queues = AppConstants.QUEUE)
    public void process(String msg){
        System.out.println("接收到队列1中的消息,内容为:"+msg);
    }

3. Apache Kafka

详细可参考文章:Spring Boot Kafka

3.1. 添加依赖

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

3.2. 发送消息

kafkaTemplate.send(AppConstansts.TOPIC,msg);

3.3. 接收消息

 @KafkaListener(topics = AppConstansts.TOPIC,groupId = AppConstansts.TOPIC_GROUP_1)
    public void topic_1(ConsumerRecord<?,?> record, Acknowledgment ack, @Header(KafkaHeaders.RECEIVED_TOPIC) String topic){
        Optional obj = Optional.ofNullable(record.value());
        if (obj.isPresent()){
            Object msg = obj.get();
            System.out.println("Topic_1 消费了Topic:"+topic+",Message:"+msg);
            ack.acknowledge();
        }
    }

3.4. Kafka Strams

3.4.1. 添加依赖


    <dependency>
      <groupId>org.apache.kafka</groupId>
      <artifactId>kafka-streams</artifactId>
      <version>2.2.1</version>
    </dependency>

3.4.2. 配置

  @Bean
    public KStream<String, String> kStream(StreamsBuilder streamsBuilder){
        KStream<String, String> stream = streamsBuilder.stream(AppConstansts.TOPIC_1, Consumed.with(Serdes.String(), Serdes.String()));
        stream.map((key, value) -> {
            value+="--huchx";
            return new KeyValue<>(key,value);
        }).to(AppConstansts.TOPIC_2);
        return stream;
    }

3.4. 附加Kafka属性

参考官网:Apache Kafka

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值