您当前的位置: 首页 >  rabbitmq

消息中间件系列教程(16) -RabbitMQ-应答模式

杨林伟 发布时间:2019-12-11 15:52:23 ,浏览量:3

在前面的章节中,消费者都是自动应答的:

  • 《消息中间件系列教程(13) -RabbitMQ-SpringBoot集成RabbitMQ》
  • 《消息中间件系列教程(14) -RabbitMQ-自动补偿机制》
  • 《消息中间件系列教程(15) -RabbitMQ-基于全局消息ID解决幂等性问题》

那么消费者可以手动应答吗?答案是可以的

下面基于《消息中间件系列教程(13) -RabbitMQ-SpringBoot集成RabbitMQ》的环境讲解下自动应答的核心代码。

1.application.yml里添加自动应答(最后一行):

server:
  port: 8082
spring:
  rabbitmq:
    ####连接地址
    host: 127.0.0.1
    ####端口号
    port: 5672
    ####账号
    username: guest
    ####密码
    password: guest
    ### 地址
    virtual-host: /
    listener:
      simple:
        retry:
          ####开启消费者重试
          enabled: true
          ####最大重试次数
          max-attempts: 5
          ####重试间隔次数
          initial-interval: 3000
        ####开启手动ack
        acknowledge-mode: manual

2.消费内容,手动应答:

@Component
public class FanoutSmsConsumer {

    @RabbitListener(queues = "fanout_sms_queue")
    public void process(Message message, @Headers Map headers, Channel channel) throws Exception {
        System.out
                .println(Thread.currentThread().getName() + ",邮件消费者获取生产者消息msg:" + new String(message.getBody(), "UTF-8")
                        + ",messageId:" + message.getMessageProperties().getMessageId());
        // 手动ack
        Long deliveryTag = (Long) headers.get(AmqpHeaders.DELIVERY_TAG);
        // 手动签收
        channel.basicAck(deliveryTag, false);
    }
}

3.因为application.yml里开启了手动应答,如果不手动应答,消息队列里会一直存在消息。 在这里插入图片描述 在这里插入图片描述 4.开启手动应答,而且代码里也回复了,消息队列里面的消息也会别消费。 在这里插入图片描述 在这里插入图片描述 本文代码已上传至Github,有兴趣的同学可以下载来看看:https://github.com/ylw-github/SpringBoot-RabbitMQ-Demo.git

关注
打赏
1688896170
查看更多评论

杨林伟

暂无认证

  • 3浏览

    0关注

    3279博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文
立即登录/注册

微信扫码登录

0.0464s