六 SpringCloud - RabbitMQ安装,三种消息发送模式,消息发送确认,消息消费确认(自动,手动)( 二 )

3.0.4 手动操作队列关系在测试的时候,一定要注意交换机和队列的绑定关系,只要绑定过的关系就会一直存在需要手动删除;如果测试结果不正常的时候 , 看一些交换机和队列与键值的绑定关系;
选择队列:

六 SpringCloud - RabbitMQ安装,三种消息发送模式,消息发送确认,消息消费确认(自动,手动)

文章插图
删除队列:
六 SpringCloud - RabbitMQ安装,三种消息发送模式,消息发送确认,消息消费确认(自动,手动)

文章插图
3.1 Direct 直连模式3.1.0 核心构造方法:Queue
  • 核心构造方法:Queue(String name, boolean durable, boolean exclusive, boolean autoDelete)
  1. name参数:name – the name of the queue.
    • 指定创建的消息队列的名字,参数必传,即创建队列必须要有队列名 。
  2. durable参数:durable – true if we are declaring a durable queue (the queue will survive a server restart)
    • 指定创建的消息队列是否需要持久化 , 默认是true,如果是true,该队列支持持久化 , 自动持久化到磁盘,RabbitMQ服务重启,队列仍然是可用的(存活的) 。
  3. exclusive参数:true if we are declaring an exclusive queue (the queue will only be used by the declarer's connection)
    • 指定创建的消息队列是否是排他队列,默认是false , 如果是true,该队列是排他队列,只有创建当前队列的连接才可以使用 , 连接一旦断开,队列会自动删除 。
  4. autoDelete参数:true if the server should delete the queue when it is no longer in use
    • 指定创建的消息队列是否是自动删除队列,默认是false , 如果是true,该队列是自动删除队列,一旦没有消息生产者或者消费者使用当前队列,会被自动删除 。
3.1.1配置类/** * Created On : 1/11/2022. * <p> * Author : huayu * <p> * Description: Direct直连模式,自动配置类 , 自动创建队列,交换机,并将队列绑定到交换机 , 指定唯一路由 */@Configurationpublic class RabbitMQDirectConfig {//创建 直连队列@Beanpublic Queue directQueue(){//创建 直连队列return new Queue(RabbitMQConstant.RABBITMQ_DIRECT_QUEUE_NAME_KH96,true);}//创建 直连交换机@Beanpublic DirectExchange directExchange(){// 创建支持持久化的直连交换机,指定交换机的名称return new DirectExchange(RabbitMQConstant.RABBITMQ_DIRECT_EXCHANGE_KH96);}//将直连队列和直连交换机 进行绑定,并指定绑定的唯一路由键@Beanpublic Binding directBinding(){// 将直连队列和直连交换机进行绑定,并指定绑定的唯一路由键return BindingBuilder.bind(directQueue()).to(directExchange()).with(RabbitMQConstant.RABBITMQ_DIRECT_ROUTING_KEY_KH96);}}3.1.2消息生产者/** * Created On : 1/11/2022. * <p> * Author : huayu * <p> * Description: Direct 直连模式 消息生产者 */@Slf4j@Componentpublic class RabbitMQDirectProducer {@Autowiredprivate RabbitTemplate rabbitTemplate;/*** @author : huayu* @date: 1/11/2022* @param: [directMsg, directExchange, directRoutingKey]* @return : void* @description : 使用直连模式,发送消息到直连交换机,通过交换机绑定的唯一路由键,将消息发送到绑定的队列中*/public void sendDirectMsg2DirectExchange(String directExchange,String directRoutingKey,String directMsg){log.info("++++++direct模式消息生产者 , 发送直连消息:{},到交换机:{},路由键:{} ++++++",directMsg,directExchange,directRoutingKey);rabbitTemplate.convertAndSend(directExchange,directRoutingKey,directMsg);}}3.1.3消费者3.1.3.1 消费者One/** * Created On : 1/11/2022. * <p> * Author : huayu * <p> * Description: Direct 直连模式消费者 One */@Slf4j@Component//指定接听的 消息队列 名字@RabbitListener(queues = RabbitMQConstant.RABBITMQ_DIRECT_QUEUE_NAME_KH96)public class RabbitMQDirectConsumerOne {/*** @author : huayu* @date: 1/11/2022* @param: [directMsgJson]* @return : void* @description : Direct 直连模式消费者One,消费信息*///指定消息队列中的消息,交给对应的方法处理@RabbitHandlerpublic void consumeOneDirectMsgFromDirectQueue(String directMsgJson){log.info("***** Direct直连模式 , 消费者One,消费消息:{} ******",directMsgJson);// TODO 核心业务逻辑处理}//@RabbitHandler//自动根据队列中的消息类型,自动区分方法//public void consumeOtherDirectMsgFromDirectQueue(List<String> directMsgJson){//log.info("***** Direct直连模式,消费者Two,消费消息:{} ******",directMsgJson);////// TODO 核心业务逻辑处理////}}3.1.3.2 消费者Two/** * Created On : 1/11/2022. * <p> * Author : huayu * <p> * Description: RabbitMQDirectConsumerTwo */@Slf4j@Component//指定监听的消息队列 名字@RabbitListener(queues = RabbitMQConstant.RABBITMQ_DIRECT_QUEUE_NAME_KH96)public class RabbitMQDirectConsumerTwo {/*** @author : huayu* @date: 1/11/2022* @param: [directMsgJson]* @return : void* @description : Direct 直连模式消费者 Two,消费信息*///指定消息队列中的消息,交给对应的方法处理@RabbitHandlerpublic void consumeOneDirectMsgFromDirectQueue(String directMsgJson){log.info("***** Direct直连模式 , 消费者Two,消费消息:{} ******",directMsgJson);// TODO 核心业务逻辑处理}}

推荐阅读