rabbitmq

1.RabbitTemplate中convertSendAndReceive方法与convertAndSend方法的区别

  1.1 convertSendAndReceive(…):可以同步消费者。使用此方法,当确认了所有的消费者都接收成功之后,才触发另一个convertSendAndReceive(…),也就是才会接收下一条消息。RPC调用方式。

    convertAndSend(…):使用此方法,交换机会马上把所有的信息都交给所有的消费者,消费者再自行处理,不会因为消费者处理慢而阻塞线程。

  rabbitMQ五种消息发送模式——非普通模式

      rabbitMq(三)rabbitMq基本概念

   

 

 

   

 消费者接受消息流程

  1、生产者连接到 Rabbit Mq Broker, 建立连接(Connection),  开启信道;

  2、消费者象 RabbitMq Broker 请求消费相应队列中的消息,可能会设置相应的回调函数,和准备工作;

  3、等待 RabbitMq Broker 回应并投递相应队列中的消息,消费者接受消息;

  4、消费者确认 ACK(默认是自动ack,可改为手动) 接受到的消息

  5、RabbitMQ 从队列中删除以及确认的额消息

  6、关闭信道,关闭连接

2.参考链接

2.1 SpringBoot整合RabbitMQ实现消息的发送与接收

2.2SpringBoot2.x整合RabbitMQ(完整版)

 

3. rabbitmq   工作队列模式(work模式)

  3.1 RabbitMQ的第2种消息模型:work模式

4. 队列模式

  4.1 简单队列模式,一个生产者,一个消费者

  4.2 一个生产者,多个消费者

        4.3 二者之间的区别

    

 简单队列和work 模式的不同:
  简单队列只要消息从队列中获取,无论消费者获取到消息后是否成功消费,比如遇到状况:断电,都认为是消息已经成功消费;

  work模式消费者从队列中获取消息后,服务器会将该消息标记为不可用状态,等待消费者反馈,如果消费这一直没有反馈,则该消息一直处于不可用状态

 

 

 

 5.生产者消息确认,确认的两个点:确认消息已经发送到交换机;确认消息已经发送到队列

  5.1 RabbitMQ系列--生产者的消息确认机制

  5.2 yml 中开启的配置

  

复制代码
  #配置rabbitMq 服务器
  rabbitmq:
    host: 82.156.175.242
    port: 5672
    username: admin
    password: admin
    #虚拟host
    virtual-host: my_vhost
    # 确认消息已发送到交换机(Exchange) 开启Rabbitmq发送消息确认机制,发送消息到队列并触发回调方法
    #publisher-confirm-type: correlated  #这是新版配置
    publisher-confirms: true
    # 确认消息已经发送到队列
    publisher-returns: true
复制代码
复制代码
package ins.business.common.rabbitmq;

import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.amqp.rabbit.support.CorrelationData;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;

/**
 * @program: mesadminserver
 * @description  mq发送确认
 * @author: zhaoJs
 * @create: 2022-03-14 17:12
 */
@Component
@Configuration
@Slf4j
public class RabbitConfirm implements RabbitTemplate.ConfirmCallback , RabbitTemplate.ReturnCallback {

    @Autowired
    private RabbitTemplate rabbitTemplate;

    @PostConstruct
    public void init() {
        //指定 ConfirmCallback
        rabbitTemplate.setConfirmCallback(this);   
        rabbitTemplate.setReturnCallback(this);

    }
    
    @Override
    public void confirm(CorrelationData correlationData, boolean ack, String cause) {
        //log.info("(start)生产者消息确认=========================");
        //log.info("correlationData:[{相关数据}]", correlationData);
        //log.info("ack:[{确认情况}]", ack);

        if (!ack) {
            log.info("消息未送达到交换机(Exchange)");
            log.info("cause:[{原因}]:"+cause);
            log.info("correlationData:[{相关数据}]:"+correlationData);
        }
       // log.info("(end)生产者消息确认=========================");

    }
    /**
     * 回调
     * @param message
     * @param replyCode
     * @param replyText
     * @param exchange
     * @param routingKey
     */
    @Override
    public void returnedMessage(Message message, int replyCode, String replyText, String exchange, String routingKey) {
        log.info("消息主体:,{}", message);
        log.info("应答码:,{}", replyCode);
        log.info("描述:,{}", replyText);
        log.info("消息使用的交换器 exchange :,{}", exchange);
        log.info("消息使用的路由键 routing :,{}", routingKey);
    }
    


}
View Code
复制代码

 

 6.新建队列 新建交换机进行绑定,然后监听队列进行逻辑操作,监听的是已经创建好的队列,如果启动后队列没有创建好,就先执行以下接口调用,生产者先把交换机,队列 创建出来。消费者才能监听

 

 

 

 

 

 

 

 

 

 
 
 
posted @   BBS_自律  阅读(270)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
点击右上角即可分享
微信分享提示