RabbitMQ 03 在spring boot中基础操作

本文介绍如何在Spring Boot项目中集成RabbitMQ,并详细解释了如何通过配置实现消息发送与接收,包括不同交换类型如direct模式的使用,以及消息的手工签收方式。

1:在spring boot 项目中引入Rabbit 的引用

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

2:配置spring boot yml文件用于连接amq

spring: 
    rabbitmq:
      host: mq服务器ip地址
      port: 5672
      username: admin
      password: admin

3:配置Configuration用于操作MQ——发送消息
Exchange Type主要有fanout、direct、topic、headers四种
参考
3.1 direct
配置@Configuration

   // 定义队列名
   public static final String DIRECT_QUEUE_NAME = "direct_queue";
   //交换机
    public static final String DIRECT_EXCHANGE = "DirectExchange";
    //direct 模式下需要绑定ROUTINGKEY
    public static final String DIRECT_ROUTINGKEY = "direct";

依次新建QUEUE、EXCHANGE 并将两者绑定

 //创建队列
    @Bean
    public Queue createDirectQueue() {
        return new Queue(DIRECT_QUEUE_NAME);
    }
    //创建交换机
    @Bean
    DirectExchange directExchange(){
        return new DirectExchange(DIRECT_EXCHANGE);
    }
    //绑定队列与交换机
    @Bean
    Binding bindingDirect() {
        return BindingBuilder.bind(createDirectQueue()).
                to(directExchange()).
                with(DIRECT_ROUTINGKEY);
    }

调用

@Autowired
    private AmqpTemplate amqpTemplate;

这个里边的方法,就可以发送消息了

 public void sendDirectMsg(String msg){
        amqpTemplate.convertAndSend(RabbitConfig.DIRECT_EXCHANGE,RabbitConfig.DIRECT_ROUTINGKEY,msg);
    }

其余三种模式和这种差不多,参考上边参考连接中文章
注意:
direct、topic:这两种模式需要绑定ROUTINGKEY
fanout、headers 不需要

4:配置用于操作MQ——接收消息
这里只需要配置监听mq中的消息就可以了,使用@RabbitListener就可以达到效果,这里需要配置需要读取消息的交换机、队列(如果有ROUTINGKEY的需要配置)

  @RabbitListener(
            bindings =
                    {
                            @QueueBinding(value = @Queue(value = RabbitConfig.DIRECT_QUEUE_NAME, durable = "true"),
                                    exchange = @Exchange(value = RabbitConfig.DIRECT_EXCHANGE),
                                    key = RabbitConfig.DIRECT_ROUTINGKEY)
                    })
    public void processDirectMsg(Message massage) {
        String msg = new String(massage.getBody(), StandardCharsets.UTF_8);
        System.out.println("收到了消息"+massage);
    }

这样,当我们启动项目后,当监听对应的队列中进入消息之后,就能获取到消息了

二:消息的确认模式
上述时间中,我们的RabbitListener会监控rabbitmq,当有符合的消息的时候会被自动读取,但是有时候我们更需要的是手工签收模式,就是当我们满足特定条件下才去从队列中读取并且删除这条消息,这时候我们需要修改一下我们的配置如下:

 rabbitmq:
      host: 47.110.33.145
      port: 5672
      username: admin
      password: admin
      #回调 P(生产者) -> Exchange
      publisher-confirm-type: correlated
      #回调路由到指定的队列
      #publisher-returns: true
      listener:
        simple:
          acknowledge-mode: manual

这里的listener就是配置为手工签收模式,现在我尝试推送消息到队列中的时候,监控页面如下:
在这里插入图片描述
这里显示有两条消息(运行了多次方法)未被消费
这时候再消费者累中添加手工签收的方法即可完成手工签收:

 //手工签收
        channel.basicNack(massage.getMessageProperties().getDeliveryTag(), false,false);
### 集成RabbitMQSpring Boot项目的教程 为了在Spring Boot项目中集成和使用RabbitMQ,可以遵循以下方法来设置环境并实现消息传递功能。 #### 创建新的Spring Boot应用程序 通过Spring Initializr创建一个新的Spring Boot项目,在配置依赖项时选择`Spring Web`, `Spring AMQP`以及任何其他所需的组件。这将自动引入必要的库用于连接至RabbitMQ服务器[^1]。 #### 添加应用属性文件中的RabbitMQ配置 编辑`application.properties`或者`application.yml`文件加入如下所示的RabbitMQ连接参数: ```properties spring.rabbitmq.host=localhost spring.rabbitmq.port=5672 spring.rabbitmq.username=guest spring.rabbitmq.password=guest ``` 这些设置指定了本地运行的一个默认实例;对于生产环境中,请替换为实际的服务地址和其他认证信息。 #### 定义队列、交换机和绑定关系 利用Java代码定义所需的消息队列结构,包括声明队列、交换器及其之间的绑定逻辑。下面是一个简单的例子展示如何完成此操作: ```java import org.springframework.amqp.core.Binding; import org.springframework.amqp.core.Queue; import org.springframework.amqp.core.TopicExchange; import org.springframework.context.annotation.Bean; import org.springframework.stereotype.Component; @Component public class RabbitConfig { @Bean public Queue myQueue() { return new Queue("my_queue", false); } @Bean TopicExchange exchange() { return new TopicExchange("my_exchange"); } @Bean Binding binding(Queue queue, TopicExchange exchange) { return BindingBuilder.bind(queue).to(exchange).with("routing.key"); } } ``` 上述片段展示了怎样建立一个名为`my_queue`的队列,并将其与主题类型的交换器关联起来,同时指定路由键作为匹配条件。 #### 发送者和服务端接收者的实现 编写发送方类用来向目标队列发布消息,而消费者则负责监听特定队列上的新到达的数据包。这里给出两个基本示例供参考: **Sender.java** ```java import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class Sender { private final RabbitTemplate rabbitTemplate; @Autowired public Sender(RabbitTemplate rabbitTemplate){ this.rabbitTemplate = rabbitTemplate; } public void send(String message){ System.out.println("[x] Sent '" + message + "'"); rabbitTemplate.convertAndSend("my_exchange","routing.key",message); } } ``` **Receiver.java** ```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 Receiver implements ChannelAwareMessageListener { @Override public void onMessage(Message message, Channel channel) throws Exception { String msg = new String(message.getBody()); System.out.println("[x] Received '" + msg + "'"); } } ``` 以上就是关于如何在一个典型的Spring Boot应用程序里快速启动并运行基于AMQP协议通信模式下的RabbitMQ服务指南。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值