rabbitmq的qos和消费者一次确认多个消息

消费者确认机制

一、一次确认一个消息

这里生产者一次性向rabbitmq发送一百条消息

	@GetMapping("/affair/affair")
    public String affair(){
        long begin=System.currentTimeMillis();
        for (int i = 0; i < 100; i++) {
            boolean b = Boolean.TRUE.equals(template.invoke(operations -> {
                template.convertAndSend("testQueue", "发布的消息");
                return template.waitForConfirms(1000);
            }));
            if(b) {
                System.out.println("发布成功");
            } else {
                System.out.println("发布失败");
            }
        }
        long end=System.currentTimeMillis();
        return (end-begin)+"ms";
    }

然后消费者一条一条的消费,每次消费时间模拟为0.5秒

 	@RabbitListener(queues = "testQueue", ackMode = "MANUAL")
    public void listen(Message msg, String str, Channel channel) throws IOException, InterruptedException {
        Thread.sleep(100);
        System.out.println("消息头帧设置的内容" + msg.getMessageProperties().getHeaders());
        System.out.println("消息体中明文发布的内容" + str);
        channel.basicAck(msg.getMessageProperties().getDeliveryTag(), false);
    }

下面时消费100条消息,消费每条消息花时为0.5s的趋势图
在这里插入图片描述

二、一次确认多个消息

yml文件中的配置其中concurrency和prefetch很重要

server:
  port: 8021
spring:
  application:
    name: rabbitmq-provider
  rabbitmq:
    host: 127.0.0.1
    port: 5672
    username: guest
    password: guest
    virtual-host: /
    publisher-returns: true #设置publisher-returns消息成功则会向发布者发送成功,失败时不会将消息丢弃,而是返回给发布者,发布者根据需求处理
    publisher-confirm-type: correlated #开启发布确认模式,具体有三个值,具体的可以去百度
    listener:
      simple:
        prefetch: 10 # 设置qos最大缓存数,预接受10个消息到缓存中
        concurrency: 10 # 处理线程数,可以理解为同一时间处理多少个消息
        max-concurrency: 20

发送代码是相同的,以下是调整后的接受代码

@RabbitListener(queues = "testQueue", ackMode = "MANUAL")
    public void listen(Message msg, String str) throws IOException, InterruptedException {
        Thread.sleep(500);
        System.out.println("消息头帧设置的内容" + msg.getMessageProperties().getHeaders());
        System.out.println("消息体中明文发布的内容" + str);
        channel.basicAck(msg.getMessageProperties().getDeliveryTag(), false);
    }

下面时消费100条消息,消费每条消息花时为0.5s的趋势图,但每次同时有十条消息被消费
在这里插入图片描述

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值