SpringBoot 使用rabbitMQ

本文详细介绍了如何在SpringBoot应用中整合RabbitMQ,包括设置application.yml,创建交换机和消息队列,以及生产者和消费者的实现。重点讨论了消息的可靠投递机制,如ACK确认模式和退回模式,同时探讨了TTL过期、DLX死信队列以及如何利用TTL+DLX实现延迟队列,确保消息的正确处理和延迟发送。

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

SpringBoot 整合 rabbitMQ

application.yml设置

spring:
 rabbitmq:
   host: localhost
   username: admin
   password: admin

创建交换机,消息队列,并进行绑定

@Configuration
public class RabbitMQConfig {
   
    private static final String TOPIC_NAME = "top_name";
    private static final String QUEUE_NAME = "queue_name";
    //交换机
    @Bean("queueEx")
    public Exchange queueEx(){
   
        return ExchangeBuilder.topicExchange(TOPIC_NAME).durable(true).build();
    }
    //消息队列
    @Bean("queue")
    public Queue queue(){
   
        return QueueBuilder.durable(QUEUE_NAME).build();
    }
    //绑定
    @Bean
    public Binding queueExchange(@Qualifier("queueEx") Exchange exchange,@Qualifier("queue") Queue queue){
   
        return BindingBuilder.bind(queue).to(exchange).with("a.#").noargs();
    }
}
@Autowired
private RabbitTemplate rabbitTemplate;

生产者

public void q(){
    
 rabbitTemplate.convertAndSend("top_name","a.qwe","rabbitmqboot");
}

消费者

@RabbitListener(queues = "queue_name") //设置要监听的消息队列
public void listenerq(Message message,Channel channel){
    
 System.out.println(new String(message.getBody()));
}

消息可靠投递

Application.yml配置

rabbitmq:
   publisher-confirm-type: correlated

Java代码配置

package com.xiaoyu.config;

import org.springframework.amqp.core.ReturnedMessage;
import org.springframework.amqp.rabbit.connection.CorrelationData;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;

@Component
public class PubConfirmAndReturn implements RabbitTemplate.ReturnsCallback,RabbitTemplate.ConfirmCallback{
    
### Spring Boot集成RabbitMQ进行消息传递 #### 一、引入依赖 为了使Spring Boot项目能够与RabbitMQ交互,需在项目的`pom.xml`文件中加入如下依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency> ``` 此操作简化了与AMQP协议兼容的消息中间件如RabbitMQ之间的连接过程[^1]。 #### 二、配置application.yml 接着,在`application.yml`或`.properties`文件内指定RabbitMQ的相关属性。以下是基于YAML格式的一个实例化配置片段: ```yaml spring: rabbitmq: host: localhost # RabbitMQ服务主机名/IP地址 port: 5672 # 默认端口 username: guest # 登录账号 password: guest # 密码 virtual-host: / template: retry: enabled: true # 开启重试机制 max-attempts: 3 # 设置最大尝试次数 listener: simple: concurrency: 3 # 并发消费者数量下限 max-concurrency: 10 # 上限 acknowledge-mode: manual # 手动应答模式 prefetch: 1 # 每次预取一条未处理的信息 ``` 上述配置不仅涵盖了基本的身份验证信息,还包含了关于错误恢复策略以及性能调优方面的设定[^4]。 #### 三、定义消息生产者 创建一个用于向队列发送消息的服务类。这里给出一段简单的Java代码作为示范: ```java import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class MessageProducer { private final RabbitTemplate rabbitTemplate; @Autowired public MessageProducer(RabbitTemplate rabbitTemplate){ this.rabbitTemplate = rabbitTemplate; } /** * 发送字符串形式的消息到默认交换机下的特定路由键对应的队列里 */ public void sendMessage(String queueName, String messageBody){ System.out.println("Sending message..."); rabbitTemplate.convertAndSend("",queueName,messageBody); System.out.println("Message sent."); } } ``` 这段程序利用了@Autowired注入的方式获取到了核心组件`RabbitTemplate`,并通过它实现了消息的封装与传输功能。 #### 四、构建消息监听器(Consumer) 最后一步是要建立消费端逻辑来接收来自队列的数据流。下面是一个典型的消费者实现方式: ```java import com.rabbitmq.client.Channel; import org.springframework.amqp.core.Message; import org.springframework.amqp.rabbit.listener.api.ChannelAwareMessageListener; import org.springframework.stereotype.Component; @Component public class MessageReceiver implements ChannelAwareMessageListener { @Override public void onMessage(Message message, Channel channel) throws Exception { byte[] body = message.getBody(); try{ // 处理接收到的消息体... long deliveryTag = message.getMessageProperties().getDeliveryTag(); // 成功后手动确认已成功消费该条目 channel.basicAck(deliveryTag , false ); }catch(Exception e){ // 出现异常时拒绝这条记录,并将其重新入队等待下次被其他节点拾起 channel.basicNack(message.getMessageProperties().getDeliveryTag(),false,true); } } } ``` 在这个例子中,当有新数据到达目标队列时会触发`onMessage()`方法执行相应的业务流程;同时支持自定义异常捕获路径以便于灵活应对各种意外情况的发生[^3]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值