RabbitMQ(三)消息应答

RabbitMQ(三)消息应答,第1张

RabbitMQ(三)消息应答 看电影的几种情况
  • 自动应答:拿票走人
  • 手动应答:拿票:
    • 看完,走人
    • 没看,退票
    • 票过期了,丢掉
开启自动应答

声明消费的阶段,第二个参数

channel.basicConsume("q", true, deliver, cancel);
手动应答API

在回调里面

看完,走人

channel.basicAck(message.getEnvelope().getDeliveryTag(), false);
//false固定的

没看,退票

channel.basicReject(message.getEnvelope().getDeliveryTag(), true);
//true表示别丢

过期,丢掉

channel.basicReject(message.getEnvelope().getDeliveryTag(), false);
//false表示丢掉
测试看完走人
DeliverCallback deliver = (consumerTag, message) -> {
	Integer s = new Integer(new String(message.getBody()));
	channel.basicAck(message.getEnvelope().getDeliveryTag(), false);
	System.out.println(s);
};

两个消费者

没有问题

加点延迟看看
DeliverCallback deliver = (consumerTag, message) -> {
	try {
		TimeUnit.SECONDS.sleep(1);
	} catch (InterruptedException e) {
		e.printStackTrace();
	}
	Integer s = new Integer(new String(message.getBody()));
	channel.basicAck(message.getEnvelope().getDeliveryTag(), false);
	System.out.println(s);
};

一个没延迟,一个有延迟


可以看到,默认的轮询不受效率影响,好吧学歪了。

在看完前终止程序


终止的有点快。。。
可以看到:

  • 246810是因为一开始有两个消费者
  • 13579是因为另一个程序突然终止了
  • 消息在意外情况会返回队列。

很安全

测试没看退票

我大于四就不收了

DeliverCallback deliver = (consumerTag, message) -> {
	Integer s = new Integer(new String(message.getBody()));
	if (s >= 5) {
		channel.basicReject(message.getEnvelope().getDeliveryTag(), true);
		System.out.println("拒绝了" + s);
	} else {
		channel.basicAck(message.getEnvelope().getDeliveryTag(), false);
		System.out.println(s);
	}
};

一个正常接收,一个拒绝大于四


可以看到,前者拒绝了579,59,9,说明被拒绝了,依旧进入了轮询

测试过期丢票
DeliverCallback deliver = (consumerTag, message) -> {
	Integer s = new Integer(new String(message.getBody()));
	if (s >= 5) {
		channel.basicReject(message.getEnvelope().getDeliveryTag(), false);
		System.out.println("拒绝了" + s);
	} else {
		channel.basicAck(message.getEnvelope().getDeliveryTag(), false);
		System.out.println(s);
	}
};



可以看到:

  1. 前者拒绝了6810,并丢弃了
  2. 后者也没有接收到他们

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5694370.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存