热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SpringBoot整合RabbitMQ绑定交换机与队列方法/实例

本文用实例介绍SpringBoot中RabbitMQ如

原文网址:SpringBoot整合RabbitMQ--绑定交换机与队列--方法/实例_IT利刃出鞘的博客-CSDN博客

简介

        本文用实例介绍SpringBoot中RabbitMQ如何绑定交换机(交换器)与队列。

配置方法概述

交换机

下边两种方式等价。

ExchangeBuilder.topicExchange(EXCHANGE_TOPIC_WELCOME).durable(true).build();

new TopicExchange(EXCHANGE_TOPIC_WELCOME, true, false)

队列

下边两种方式等价

QueueBuilder.durable("Hi").build();

new Queue(QUEUE_HI, true)

绑定

下边两种方式等价

注意:第一种的参数并不是字符串。

BindingBuilder.bind(helloQueue).to(welcomExchange).with("hello.#") new Binding("[email protected]", Binding.DestinationType.QUEUE, "[email protected]", "hello.#", null) 法1:配置类(简洁方法)(推荐)

package com.example.config; import org.springframework.amqp.core.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class RabbitMQRouterConfig { public static final String QUEUE_HELLO = "[email protected]"; public static final String QUEUE_HI = "[email protected]"; public static final String EXCHANGE_TOPIC_WELCOME = "[email protected]"; public static final String ROUTINGKEY_HELLOS = "hello.#"; @Autowired private AmqpAdmin amqpAdmin; @Bean public Object initBindingTest() { amqpAdmin.declareExchange(new TopicExchange(EXCHANGE_TOPIC_WELCOME, true, false)); amqpAdmin.declareQueue(new Queue(QUEUE_HI, true)); amqpAdmin.declareQueue(new Queue(QUEUE_HELLO, true)); amqpAdmin.declareBinding(new Binding(QUEUE_HELLO, Binding.DestinationType.QUEUE, EXCHANGE_TOPIC_WELCOME, ROUTINGKEY_HELLOS, null)); return new Object(); } }

amqpAdmin.declareBinding

需要一个Binding对象作为参数

  • exchange:交换器名称
  • type:交换器类型。BuiltinExchangeType枚举类,有以下4中类型交换器:DIRECT(“direct”), FANOUT(“fanout”), TOPIC(“topic”), HEADERS(“headers”)
  • durable:设置是否持久化。true:持久化,false:非持久化。持久化可以将交换器存盘,在服务器重启时不会丢失相关消息。
  • autoDelete:设置是否自动删除。true:自动删除,false:不自动删除。自动删除的前提是至少有一个队列或交换器与这个交换器绑定,之后所有与这个交换器绑定的队列或交换器都与此交换器解绑。
  • internal:设置是否内置的。true:内置交换器,false:非内置交换器。内置交换器,客户端无法直接发送消息到这个交换器中,只能通过交换器路由到交换器这种方式。
  • arguments:其他一些结构化参数。如备份交换器:alternate-exchange、超时时间。示例配置超时时间方法:

Map params = new HashMap(); params.put("x-message-ttl", 2000); amqpAdmin.declareBinding(new Binding(QUEUE_HELLO, Binding.DestinationType.QUEUE, EXCHANGE_TOPIC_WELCOME, ROUTINGKEY_HELLOS, params)); 法2:配置类(繁琐方法)(不推荐)

不推荐的原因

适用于队列和交换器不多时。

代码示例

package com.lly.order.message; import org.springframework.amqp.core.*; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class RabbitMQConfig { public final static String QUEUE_DIRECT = "[email protected]"; public final static String QUEUE_TOPIC_OnE= "[email protected]_one"; public final static String TOPIC_QUEUE_TWO = "[email protected]_two"; public final static String QUEUE_FANOUT_OnE= "[email protected]_one"; public final static String QUEUE_FANOUT_TWO = "[email protected]_two"; public final static String EXCHANGE_TOPIC = "[email protected]"; public final static String EXCHANGE_FANOUT = "[email protected]"; public final static String ROUTINGKEY_TOPIC_OnE= "hello.key"; public final static String ROUTINGKEY_TOPIC_TWO = "*.key"; // direct模式队列 @Bean public Queue directQueue() { return new Queue(QUEUE_DIRECT, true); } // topic 订阅者模式队列 @Bean public Queue topicQueueOne() { return new Queue(QUEUE_TOPIC_ONE, true); } @Bean public Queue topicQueueTwo() { return new Queue(TOPIC_QUEUE_TWO, true); } // fanout 广播者模式队列 @Bean public Queue fanoutQueueOne() { return new Queue(QUEUE_FANOUT_ONE, true); } @Bean public Queue fanoutQueueTwo() { return new Queue(QUEUE_FANOUT_TWO, true); } // topic 交换器 @Bean public TopicExchange topExchange() { return new TopicExchange(EXCHANGE_TOPIC); } // fanout 交换器 @Bean public FanoutExchange fanoutExchange() { return new FanoutExchange(EXCHANGE_FANOUT); } // 订阅者模式绑定 @Bean public Binding topicExchangeBingingOne() { return BindingBuilder.bind(topicQueueOne()).to(topExchange()).with(ROUTINGKEY_TOPIC_ONE); } @Bean public Binding topicExchangeBingingTwo() { return BindingBuilder.bind(topicQueueTwo()).to(topicExchange()).with(ROUTINGKEY_TOPIC_TWO); } // 广播模式绑定 @Bean public Binding fanoutExchangeBingingOne() { return BindingBuilder.bind(fanoutQueueOne()).to(fanoutExchange()); } @Bean public Binding fanoutExchangeBingingTwo() { return BindingBuilder.bind(fanoutQueueTwo()).to(fanoutExchange()); } } 法3:使用方配置(不推荐)

不推荐的原因

        RabbitMQ的配置最好是统一在一个地方配置,分散配置不利于后期维护。

使用方法

@Component public class Receiver { @RabbitListener(queues = "hello") public void process(String hello) { System.out.println ("Receiver : " + hello); } @RabbitListener(bindings = @QueueBinding( exchange = @Exchange(value = "[email protected]",durable = "true",type = "topic"), value = @Queue(value = "[email protected]",durable = "true"), key = "key.#" )) public void processMessage1(Message message) { System.out.println(message); } } 法4:MQ服务端网页(不推荐)

不推荐的原因

使用方法

添加交换器

http://localhost:15672/#/exchanges   //例如:[email protected]

添加队列

http://localhost:15672/#/queues            //例如:[email protected]

交换器添加路由键

http://localhost:15672/#/exchanges=> 点击交换器名字=> Binding=> 添加队列与路由


推荐阅读
  • 本文提供了 RabbitMQ 3.7 的快速上手指南,详细介绍了环境搭建、生产者和消费者的配置与使用。通过官方教程的指引,读者可以轻松完成初步测试和实践,快速掌握 RabbitMQ 的核心功能和基本操作。 ... [详细]
  • 开发心得:深入探讨Servlet、Dubbo与MyBatis中的责任链模式应用
    开发心得:深入探讨Servlet、Dubbo与MyBatis中的责任链模式应用 ... [详细]
  • Java 中优先级队列的轮询方法详解与应用 ... [详细]
  • 本题库精选了Java核心知识点的练习题,旨在帮助学习者巩固和检验对Java理论基础的掌握。其中,选择题部分涵盖了访问控制权限等关键概念,例如,Java语言中仅允许子类或同一包内的类访问的访问权限为protected。此外,题库还包括其他重要知识点,如异常处理、多线程、集合框架等,全面覆盖Java编程的核心内容。 ... [详细]
  • 如何在Java中高效构建WebService
    本文介绍了如何利用XFire框架在Java中高效构建WebService。XFire是一个轻量级、高性能的Java SOAP框架,能够简化WebService的开发流程。通过结合MyEclipse集成开发环境,开发者可以更便捷地进行项目配置和代码编写,从而提高开发效率。此外,文章还详细探讨了XFire的关键特性和最佳实践,为读者提供了实用的参考。 ... [详细]
  • Java 9 中 SafeVarargs 注释的使用与示例解析 ... [详细]
  • 使用 MyEclipse 和 TestNG 测试框架在 Java 中高效进行单元测试
    通过MyEclipse集成TestNG测试框架,可以在Java开发中高效地进行单元测试。本文介绍了在JDK 1.8.0_121和MyEclipse 10.0离线环境下配置和使用TestNG的具体步骤,帮助开发者提高测试效率和代码质量。 ... [详细]
  • 在使用群报数小程序进行高效接龙与统计时,可以通过创建 `LinkedList` 对象并利用 `for` 循环生成指定数量的 `Person` 对象,为每个人员分配唯一的编号,并将其添加到 `LinkedList` 集合中。这一过程确保了数据的有序性和高效管理,便于后续的接龙和统计操作。此外,该小程序还支持实时更新和查看参与人员的状态,进一步提升了活动组织的便利性和准确性。 ... [详细]
  • 深入解析JWT的实现与应用
    本文深入探讨了JSON Web Token (JWT) 的实现机制及其应用场景。JWT 是一种基于 RFC 7519 标准的开放性认证协议,用于在各方之间安全地传输信息。文章详细分析了 JWT 的结构、生成和验证过程,并讨论了其在现代 Web 应用中的实际应用案例,为开发者提供了全面的理解和实践指导。 ... [详细]
  • 本文深入探讨了 MXOTDLL.dll 在 C# 环境中的应用与优化策略。针对近期公司从某生物技术供应商采购的指纹识别设备,该设备提供的 DLL 文件是用 C 语言编写的。为了更好地集成到现有的 C# 系统中,我们对原生的 C 语言 DLL 进行了封装,并利用 C# 的互操作性功能实现了高效调用。此外,文章还详细分析了在实际应用中可能遇到的性能瓶颈,并提出了一系列优化措施,以确保系统的稳定性和高效运行。 ... [详细]
  • 如何在 Java LinkedHashMap 中高效地提取首个或末尾的键值对? ... [详细]
  • C#编程指南:实现列表与WPF数据网格的高效绑定方法 ... [详细]
  • 深入解析Java中HashCode的功能与应用
    本文深入探讨了Java中HashCode的功能与应用。在Java中,HashCode主要用于提高哈希表(如HashMap、HashSet)的性能,通过快速定位对象存储位置,减少碰撞概率。文章详细解析了HashCode的生成机制及其在集合框架中的作用,帮助开发者更好地理解和优化代码。此外,还介绍了如何自定义HashCode方法以满足特定需求,并讨论了常见的实现误区和最佳实践。 ... [详细]
  • 如何构建基于Spring MVC框架的Java Web应用项目
    在构建基于Spring MVC框架的Java Web应用项目时,首先应创建一个新的动态Web项目。接着,需将必要的JAR包导入至WebContent/WEB-INF/lib目录下,确保包括Spring核心库及相关依赖。如遇缺失的JAR包,可向社区求助或通过Maven等工具自动下载。正确配置后,即可开始搭建应用结构与功能模块。 ... [详细]
  • MongoDB Aggregates.group() 方法详解与编程实例 ... [详细]
author-avatar
黄体测字_335
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有