3.0.4 手动操作队列关系在测试的时候,一定要注意交换机和队列的绑定关系,只要绑定过的关系就会一直存在需要手动删除;如果测试结果不正常的时候 , 看一些交换机和队列与键值的绑定关系;
选择队列:
文章插图
删除队列:
文章插图
3.1 Direct 直连模式3.1.0 核心构造方法:Queue
- 核心构造方法:Queue(String name, boolean durable, boolean exclusive, boolean autoDelete)
- name参数:name – the name of the queue.
- 指定创建的消息队列的名字,参数必传,即创建队列必须要有队列名 。
- durable参数:durable – true if we are declaring a durable queue (the queue will survive a server restart)
- 指定创建的消息队列是否需要持久化 , 默认是true,如果是true,该队列支持持久化 , 自动持久化到磁盘,RabbitMQ服务重启,队列仍然是可用的(存活的) 。
- exclusive参数:true if we are declaring an exclusive queue (the queue will only be used by the declarer's connection)
- 指定创建的消息队列是否是排他队列,默认是false , 如果是true,该队列是排他队列,只有创建当前队列的连接才可以使用 , 连接一旦断开,队列会自动删除 。
- autoDelete参数:true if the server should delete the queue when it is no longer in use
- 指定创建的消息队列是否是自动删除队列,默认是false , 如果是true,该队列是自动删除队列,一旦没有消息生产者或者消费者使用当前队列,会被自动删除 。
/** * 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 核心业务逻辑处理}}
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 剑与远征8月诗社竞答第六天答案是什么
- 十六 企业级自定义表单引擎解决方案--Excel导入导出
- Oracle中查询表结构的六种方法
- 六 Selenium4+Python3系列 - Selenium的三种等待,强制等待、隐式等待、显式等待
- 某 .NET RabbitMQ SDK 有采集行为,你怎么看?
- 梦幻西游手游妙法试炼第六章怎么通关
- 之六 2流高手速成记:从SpringBoot到SpringCloudAlibaba
- 伍六七第三季更新时间_伍六七第三季什么时候更新
- 鸡皮疙瘩第六关恐惧怎么过
- .Net Core&RabbitMQ限制循环消费