我们再来看另一个交换器的使用,Topic交换器的使用,Topic交换器也称之为主题交换器,他的特点是什么呢,是根据这个规则来匹配,是一个什么样的规则呢,咱们先看这个图,这个图和上面最大的区别就是,我的服务端多了,消息的生产者多了,有用户服务,有商品服务,有订单服务,然后他们都像RabbitMQ发送消息,这个消息会交给交换器来处理,交换器是谁呢,注意看匹配模式,这个我们是交给一个叫topic的交换器来处理,那么Topic最大的特点是什么呢,他可以根据一个规则,什么规则呢,我们看他的路由key,看到了吗,原来我们的路由key是写一个具体的字符串,而现在的交换器的路由key呢,*.log.info,*.log.error,*.log.*,什么意思呢,它是可以根据星号,模糊匹配,去决定将那个信息放到哪个队列里面,这是Topic交换器最大的一个特点,相比我们的direct,最大的特点是可以根据路由key,模糊匹配,然后决定将那个消息,放到哪个队列当中,这就是Topic交换器的一个特点,然后相比上一个案例,我们的队列又多了一个了,原来有log.info队列,log.error队列,现在还有log队列,然后至于消息的消费者呢,原来我们只有一个INFO日志处理,有一个Error日志处理,现在多了一个全日志处理,这个全日志处理是什么意思呢,我们看这个匹配规则,能进入到log队列里的,路由key,它是"*.log.*",也就是说,原来进入到log.info的消息和log.error队列的消息,其实最终都会进入到log队列里,我们这个叫全日志处理,所以这就是Topic交换的一个特点,可以根据路由key进行模糊匹配,决定将哪个消息放到哪个队列当中,那么接下来我们就按照这个需求,去使用以下Topic交换器,首先我们还是先去搭建环境

回到我们的代码当中,我们把上两个案例做一个拷贝,我们多个服务就不用多个项目来模拟了,用一个项目里面加多个类来表示多个服务,消费者这里也是这样的,那我们还是把这两个项目copy一下,我们先来拷贝一个Provider,然后我们改一下名称,这个叫rabbitmq-topic-provider然后我们先修改一下他的pom文件,把它的artifactId改一下,把name改一下,然后我们再来拷贝一个Consumerrabbitmq-topic-consumer然后我们再去修改一下他的pom文件,这样我们两个项目就创建好了,然后在这个项目当中呢,我们还是把配置文件修改一下,首先看一下Provider,看一下application.properties文件,在这个文件当中呢,上面的信息我们都不动,这个交换器的名称我们肯定要改一下mq.config.exchange=log.topic现在改成什么呢,topic,然后下面这些信息,我们就先都不要了,都去掉,就留一个交换器的名称就可以了,然后我们再来看Consumer的配置文件,Consumer的配置文件当中呢,交换器的名称我们也得改成topicmq.config.exchange=log.topic
mq.config.queue.info=log.info
mq.config.queue.error=log.error
mq.config.queue.logs=log.all然后队列的名称我们是要的,然后这里是不是还有队列的,3个队列,路由键我们可以先把他注释掉,error队列名称留着,我们现在是三条队列,这里还有一个是log队列,也是我们的全日志服务,log队列名称,我们改一下,我们叫mq.config.queue.logs=log.all然后key对应的value叫什么都行,我们叫log.all,这样我们把consumer的配置文件,也搞定了,这个是我们创建的两个项目,创建项目,第二个是修改配置文件,第一个是Provider的,Provider里面只有一个,设置交换器的名称,然后是Consumer的,这样我们就把配置文件建立好了,我们还是要理解这个需求,Topic交换器到底在什么时候使用,我们再简单的回顾一下说一说,你想,用户服务,订单服务,商品服务未来会产生很多的日志,错误日志也好,消息日志也好,如果我要记录不同服务当中的日志,其实不管你是用户服务商品服务还是订单服务,它产生的日志不都是日志吗,如果我们对产生日志去做处理的话,如果我们不用Topic,我们还用direct交换器去做的话,你会发现,你得针对每个服务,服务越多,你在这里创建的队列也就越多,其实对于我们来讲呢,比如log.info队列,我就是存info级别的消息,我不管你是用户服务还是商品服务还是订单服务,只要你是info级别的信息,都进入到我这个队列里,就可以了,所以说呢,他的这种匹配模式呢,可以从数据库的专业来看,他针对消息是多对多的设计,你所有的服务都可以往这里发,然后我可以根据你当前的路由键,模糊匹配,给不同的队列,而不像direct,一个服务对应一个队列,那这样服务越多队列也就越多了,其实没有必要的,我们只关心你的消息是什么,我不管你是哪个服务产生的,你哪个服务产生的,你是用户服务也好,还是商品服务也好,这两个产生info的信息,没有必要放到两条队列里面来存放,你都进入到log.info队列里面来存就可以了,所以这种应用的领域还是比较广的,可以降低我们队列的个数,所以这是Topic交换器的一个特点,我们把环境搭建好了,接下来再来编写生产者和消费者的代码
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.learn</groupId><artifactId>rabbitmq-topic-provider</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.12.RELEASE</version><relativePath/> </parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version><thymeleaf.version>3.0.9.RELEASE</thymeleaf.version><thymeleaf-layout-dialect.version>2.2.2</thymeleaf-layout-dialect.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><!-- 这个插件,可以将应用打包成一个可执行的jar包 --><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>
spring.application.name=rabbitmq-topic-providerspring.rabbitmq.host=59.110.158.145
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guestmq.config.exchange=log.topic
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.learn</groupId><artifactId>rabbitmq-topic-consumer</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.12.RELEASE</version><relativePath/> </parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version><thymeleaf.version>3.0.9.RELEASE</thymeleaf.version><thymeleaf-layout-dialect.version>2.2.2</thymeleaf-layout-dialect.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><!-- 这个插件,可以将应用打包成一个可执行的jar包 --><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>
spring.application.name=rabbitmq-topic-consumerspring.rabbitmq.host=59.110.158.145
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guestmq.config.exchange=log.topic
mq.config.queue.info=log.info
mq.config.queue.error=log.error
mq.config.queue.logs=log.all

Topic交换器-搭建环境相关推荐

  1. RaDirect交换器-搭建环境

    我们看一下RabbitMQ交换器讲解,交换器在消息队列当中,是非常重要的一个环节,所以我们要重点的讲一下,我们先回顾一下在讲Rabbit原理的时候,我们提到了一个Exchange的关键组件,那么Exc ...

  2. Fanout交换器-搭建环境

    我们讲一下RabbitMQ中的第三种交换器,Fanout交换器,相比上两种我们讲过的交换器,最大的特点它是以广播的模式,来做消息的传递,我们来看一下这样的需求,我这里有一个订单服务,然后还有一个短信服 ...

  3. 搭建环境_maven: 搭建工程: ssm整合: 搭建测试:

    2019独角兽企业重金招聘Python工程师标准>>> 搭建环境_maven: 搭建工程: ssm整合: 搭建测试: 搭建环境问题解决: 转载于:https://my.oschina ...

  4. java 取绝对值_Java实现一致性哈希算法,并搭建环境测试其负载均衡特性

    实现负载均衡是后端领域一个重要的话题,一致性哈希算法是实现服务器负载均衡的方法之一,你很可能已在一些远程服务框架中使用过它.下面我们尝试一下自己实现一致性哈希算法. 一. 简述一致性哈希算法 这里不详 ...

  5. putty php环境搭建,centos7(linux)系统下php搭建环境和创建laravel项目

    laravel-企业官网-搭建环境和创建laravel项目 购买centos7云服务器,再远程连接 1. 下载putty 输入服务器账号密码远程链接yum install -y wget && ...

  6. Hyperledger fabric1.4.0搭建环境

    Hyperledger fabric1.4.0搭建环境 原创牧竹子 最后发布于2019-05-11 21:10:20 阅读数 630  收藏 展开 Hyperledger fabric1.4.0搭建环 ...

  7. java窗口代码_Java系列教程day01——java的搭建环境

    day01--搭建环境变量&HelloWorld程序 1.注意听课,不要溜号,不要睡觉,不要游戏. 2.我的联系方式: QQ:79539705 3.整理笔记.绘制思维导图.完成作业.. 一.J ...

  8. Topic交换器-编写消费者

    我们接着来编写Consumer,回到我们的代码当中,打开我们的topic-consumer,配置文件我们已经改完了,先放到这里,看我们的代码,我们先改第一个InfoReceiver,InfoRecei ...

  9. 杰瑞服务器虚拟化,大家在Mac中开发PHP,是用虚拟机的方式还是直接在Mac下搭建环境...

    如题,本人想在mac下做PHP开发,想在本地看到实时效果,然后开发完后再部署到服务器上(CentOS),或者用SSH直接连接服务器VIM开发,但我是PHP新手,还是想用PHPStrom(刚买了个一年, ...

最新文章

  1. 5- RAC 集合 RACTuple RACSequence
  2. Facebook的首席技术官:人工智能已用于内容审核,未来会做更多
  3. linux c 编译器处理警告、错误 #pragma GCC diagnostic ignored -Wunused
  4. 大厂面试官最喜欢问的面试难点
  5. Xampp修改默认端口号
  6. MetaModelEngine:域模型定义
  7. 模板类的析构函数如何写_项目经理如何正确写好年终总结+10大PPT模板可直接套用...
  8. Unity3D shader简介
  9. dbgView的使用
  10. KYLO的Spring知识总结
  11. Nonebot QQ机器人插件七:智能聊天机器人
  12. mysql odbc 免安装_MySQL免安装版配置
  13. PJzhang:微软出口管制条例
  14. 三款正射图合并软件性能对比
  15. 程序猿麒麟臂打造之路(健身二)
  16. matlab解决阻尼牛顿,matlab阻尼牛顿法例题
  17. 命令行测试BT,WIFI,Sensor工作状态
  18. 利用函数模板解决双倍功能
  19. 数字图像处理笔记2-nbsp;边沿检…
  20. ArcGIS9.3的注册码

热门文章

  1. ASP.NET中常用功能代码总结(3)——上传图片到数据库
  2. bootstrap -- 一个标签中,同时有 col-xs , col-sm , col-md , col-lg
  3. python闭包、装饰器
  4. python学习笔记之常用模块用法分析
  5. [翻译]应用程序池和应用程序域的区别
  6. 抓糗百数据和图片的Python爬虫
  7. ios消息推送机制原理与实现(转)
  8. oracle 学习笔记
  9. 拋棄虛擬機,微軟實驗讓我們在線做(一)
  10. Python 网络爬虫的常用库汇总