RabbitMQ 03 在spring boot中基础操作

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);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值