RabbitMQ

RabbitMQ Cluster + Queue HA + Haproxy + Keepalived


1. 接受方:通知server是否成功处理mq
channel.basicConsume(config.getQueueName(), false, consumer);
关闭自动确认,但没有手动确认。
A. 成功接收mq,并成功处理。--- server: mq消息从内存中移除。
B. 成功接收mq,但没有处理完成。 --- server: mq消息一直发送。

channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
关闭自动确认,设置手动确认,执行此确认后,不管有没有处理完成,server一旦收到确认,就将mq消息从内存中移除了。

自动确认:处理完成消息后,会自动确认;没有处理完消息,不会确认。并非收到消息就确认。

2. 发送方:接收server是否接收到mq
设置确认开关:
spring.rabbitmq.publisher-confirms=true
通过构造方法注入,设置回调:---- 1个rabbitTemplate只能有1个ConfirmCallback
public RabbitMqSend(RabbitTemplate rabbitTemplate) {
        this.rabbitTemplate = rabbitTemplate;
        rabbitTemplate.setConfirmCallback(new RabbitTemplate.ConfirmCallback() {
            @Override
            public void confirm (CorrelationData correlationData,boolean ack, String cause){
                logger.info(" 回调id:" + correlationData);
                if (ack) {
                    logger.info("mq Server已成功收到消息");
                } else {
                    logger.error("mq Server未收到消息:" + cause);
                }
            }
        });
}

测试重试:debug模式,发送mq--断网--联网。

事务(Transactional)或发布确认(Publisher Confirms / aka Publisher Acknowledgements)机制可保证消息被正确投递,即从理论上来说MQ不会丢消息。
注意这两种机制不能共存。事务机制是重量级的,同步的,会带来大量开销;发布确认机制则是轻量级的,异步的。
对于发布确认机制,
(1) 需置CachingConnectionFactory的publisherConfirms属性为true;
(2) 生产者需调用setConfirmCallback(ConfirmCallback callback),Confirms就会回调给生产者;
(3) 消费者需考虑消息去重处理。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值