我们看一下RabbitMQ交换器讲解,交换器在消息队列当中,是非常重要的一个环节,所以我们要重点的讲一下,我们先回顾一下在讲Rabbit原理的时候,我们提到了一个Exchange的关键组件,那么Exchange是什么呢,其实就是交换器,然后他的作用是什么呢,再回顾一下,是用来接收生产者发送的消息,并将这些消息路由给服务器中的队列,其实通过这句话我们也能够看出来,所谓的交换器,就是接收生产者所发送的消息,根据交换器,指定来决定,当这个消息存入到哪个队列当中,然后消费者再通过这个信道,去从队列当中取出相应的消息,就是这样的一个过程,所以说你的交换器,使用的是哪一种交换器,将决定会进入到相应的队列当中,常见的交换器类型有三种,第一种是direct,发布与订阅类型的,采用的是基于路由器完全匹配,然后还有一个fanout,广播模式的,还有一个是topic,主题,它是基于模糊规则匹配的,那么这三种交换器的类型,在接下来,我们都会逐一讲解,你可以将交换器理解为消息队列当中,非常重要的一个技术点了,所以对于这一块我们也会详细的去讲解一下,我们先来看第一个交换器,就是这个direct,我们先看一个需求,我们会按照我们的需求去使用direct,这个需求是什么呢,业务场景是系统日志处理场景,然后他有这么三个特点,来看一下,第一微服务日志交给日志服务器处理,日志处理服务器有4个服务,分别为Debug,info,warn,error,然后服务直接通讯采用direct,发布订阅的方式,来发送消息,然后我们再往下看这个图,我们在这个图当中呢,有三个重要的环节,第一个就是有一个服务方,这个服务方是什么呢,就是消息的生产者,第二个是我们的消息队列,第三个是INFO日志服务器和ERROR日志服务器,这两个是什么呢,是我们的消息接收者,就是我们的Consumer,这个是Provider,那么我们按照这个图,去实现一下,在这里呢,我们要注意的是什么呢,第一个就是消息队列里有一个要求,他的交换器类型我们用的是direct,然后他会根据我们所使用的路由器,来决定将不同的消息,放到不同的队列当中,我们有几个队列,有两个队列,那就要求我们根据不同的日志类型,放到两个不同的队列当中,我们这里为什么只有两个队列呢,因为是这样的,日志处理服务器有四个服务,我们这里其实只有两个服务,因为你做出这两个和做出这四个没有太大的区别,能够做出这两个那另外两个也是一样的,我们就以两个服务作为我们的需求点,一个是INFO日志处理服务,一个ERROR日志处理服务,所以说你有两个服务了,队列我们使用两个就可以了,然后队列的名称也给我们了,一个叫log.info,一个叫log.error,然后这两个服务从不同的队列当中去取消息就可以了,这是我们的一个需求,接下来我们先去搭建环境,在搭建环境的时候,我们怎么去做小案例,我准备两个项目,两个project,一个是服务的发送者,一个是消息的接收者,但是消息接收者你们看,我们画的是两个处理服务,其实你单独做两个也可以,我们为了节省时间,就做一个Consumer,然后在Consumer里面呢,写两个不同的类,从两个不同的队列当中,去获取消息的一个实现,当然你拆分成两个项目也可以,那我们接下来就搭建环境

回到我们的eclipse当中,首先我们先要去创建两个项目,大家一定要看懂这个图,创建两个项目,一个是服务,一个是消息的生产者,一个是消息的消费者,我们先来创建消息的生产者,我们不采用快速创建的方式了,你也可以直接new一个project,然后进行相关的配置也可以,还有通过spring的官网去创建项目也可以,那我这里为了节省时间,把我们上一个项目做一个拷贝,我们把里面的内容做一个修改,把这个项目copy一下,然后我们改个名,这个我们就不叫springcloud了,我们用的是direct交换器,然后我们这个做的是consumerrabbitmq-direct-consumerpom文件里做一些修改,这样我们一个consumer就创建好了,我们看一下他的配置文件,spring.application.name=rabbitmq-direct-consumerspring.rabbitmq.host=59.110.158.145
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest然后再去创建一个Providerrabbitmq-direct-provider然后我们再改一下他的pom文件,无论是consumer还是provider,pom文件就没有什么需要修改的了,容器,测试,然后amqp,这个搭建环境当中的第一个环节,创建项目,项目创建好以后呢,完成一些配置,修改全局配置文件,我们看一下需要做什么配置呢,我们先看Consumer,现在在Consumer当中配置文件,只有 一些基本的配置的,我们需要在Consumer的配置文件当中呢,添加这么几项配置,第一个我们需要给我们的交换器,未来要使用的交换器起个名称,这个名称如果我们直接写死在代码当中呢,其实这样就称为硬编码了,我们可以把交换器的名称呢,定义到配置文件当中,然后我们去配置文件里去取他,就可以了,未来我们的交换器想要去交换名称的时候,只要修改配置文件就可以了,所以呢第一个环节,我们去设置交换器名称的配置,设置交换器的名称,然后你名称叫什么都可以,无论是key也好,还是value也好,这个都是我们自己定义的,比如我们的key打算用这样的一个结构去定义,mq.config.exchange=log.directexchange不是交换器吗,然后这是他的一个key,key后面所对应的就是我们未来要使用的,我们自己起的一个名称,比如这个名称我们叫log.direct,为什么要交log.direct,看我们这个图,看我们的需求,需求我们主要要做的消息处理,日志处理的这样一个过程,所以我前面加一个log.direct,表示处理日志的一个交换器,我们需要加日志交换器的名称,接下来我们还要去建立一些配置,增加一些配置,我们接着再往下看,我们再加一个info级别的队列名称,我们现在设置的是什么,还得看这个图,这不是有 两个队列的名称吗,队列名称不是我们自己起的吗,那到底你这个队列名称是记录info级别的呢,还是error级别的呢,我们肯定不能让两个队列名称相同,所以我们在配置文件当中,来给这两个队列起一个普通的名称,然后未来给队列起名称的时候,不要从配置文件里获取不就行了吗,所以我就建立一个info的队列名称,这个名我们怎么叫呢,比如我们还是以mq作为前缀,mq.config.queue.info,表示我队列的名称是,这个队列是info级别的队列,然后我们给他起一个名字,名字叫log.infomq.config.queue.info=log.infoinfo的名称建立完了,就是队列的名称建立完了,我们还要建立什么呢,交换器和队列之间还有一个箭头,有一个router-key,这是什么呢,其实这个我们上节课已经说过了,这个就是路由件,路由件是什么呢,回顾一下,RabbitMQ决定消息该投递到哪个队列的一个规则,我现在这个交换器,是可以把信息放到不同的队列当中的,但是往哪个队列里放,你得给我一个规则,那么其实这个规则,就是这个Router-key,就是我们说的路由键,所以如果我们采用的是发布订阅式的,direct的交换器,他只要是路由key相同的,他就会把这些信息放到一个队列当中,所以说我们现在,在做这个需求的时候,我们要告诉交换器,进到这个队列里的消息,他的路由键是什么,只要你保证不同的消息,拥有相同的路由键,他们就会进入到相同的队列当中,所以我们还得去配置路由键,路由键是我们自己来配置的,其实他就是一个字符串,接下来我们再来配置路由键,先来配info的路由键mq.config.queue.info.routing.key=log.info.routing.key这个也是我们自己起的,我们这个路由键叫什么呢,我们还是叫mq.config.queue.info.routing.key,然后我们给他起一个key,当然这个key叫什么都行,我们叫log.info.routing.key,表示的是info级别的路由信息,那么到这我们的info信息就配置完了,接下来我们还有一个error级别的,所以我们还得去配置一个error级别的,error的队列名称,然后还有error的路由键mq.config.queue.error=log.error
mq.config.queue.error.routing.key=log.error.routing.key然后我们把这个copy过来,做一个改变,把info全部改成error就可以了,这样我们就做了两套的队列名称和路由键,一套是info的,一套是error的,当然如果你要想去做debug,跟warn的话,你这里加相应的key和value就可以了,我们这里就做两个,这样消息的接收者,Consumer的配置文件,就搞定了,第一个修改consumer的配置文件,然后我们就来看Provider的,Provider我们也得对他做一个修改,我们还是看这个图,现在Provider和Consumer他们使用同一类的交换器,是不是才能把信息发送到不同的队列里,你服务器通过这个交换器发送过来,然后接收者才能通过这个队列把消息取出来,所以他这块也得配置交换器,这样我们就把Consumer里面的copy过来,这个拿过来mq.config.exchange=log.direct交换器的配置在Provider里面,然后Provider还要配什么呢,还得配路由键,就是他在这,也得根据路由键,发消息的时候,消息也得带路由键,你不带路由键,交换器哪知道你的消息放到消息队列里,所以得根据你的路由键知道你的消息发送到哪个路由键当中,所以他肯定也得用路由键,那我们就得把这两个级别的,路由键copy过来,放到Provider当中mq.config.queue.info.routing.key=log.info.routing.key对于Provider来讲,主要配置这三项就可以了,这个是修改Provider的配置文件,这样按照我们图形的需求,我们基本的环境就搭建完毕了
<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-direct-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-direct-consumerspring.rabbitmq.host=59.110.158.145
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
mq.config.exchange=log.direct
mq.config.queue.info=log.info
mq.config.queue.info.routing.key=log.info.routing.key
mq.config.queue.error=log.error
mq.config.queue.error.routing.key=log.error.routing.key
<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-direct-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-direct-providerspring.rabbitmq.host=59.110.158.145
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
mq.config.exchange=log.direct
mq.config.queue.info.routing.key=log.info.routing.key
mq.config.queue.error=log.error

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

  1. Fanout交换器-搭建环境

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

  2. Topic交换器-搭建环境

    我们再来看另一个交换器的使用,Topic交换器的使用,Topic交换器也称之为主题交换器,他的特点是什么呢,是根据这个规则来匹配,是一个什么样的规则呢,咱们先看这个图,这个图和上面最大的区别就是,我的 ...

  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. 杰瑞服务器虚拟化,大家在Mac中开发PHP,是用虚拟机的方式还是直接在Mac下搭建环境...

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

  9. jenkins搭建_自动化测试系列之jenkins配置搭建环境

    今天来给大家讲解一下关于jenkins配置搭建环境~ 1.安装及运行 (1)下载 http://updates.jenkins-ci.org/latest/jenkins.war (2)运行 两种运行 ...

最新文章

  1. ORB_SLAM2中的Sim3变换
  2. nginx负载均衡配置-windows
  3. 90国央行齐聚华盛顿研讨区块链:“这一切意味着什么”
  4. Webkit推出新的着色语言whlsl
  5. 夏令时 DST (Daylight Saving Time) java中的夏令时。
  6. Unity 使物体朝向某个方位
  7. MSSQL → 04:表的创建与维护
  8. Atitit 安全审计法 目录 1. 安全审计数据结构 1 2. Expame 提现流程 1 2.1. 获取提现钱的数据余额 1 2.2. 扣去余额 1 2.3. 开始safe log 2 2.4.
  9. Shell 使用 expr 进行数学运算
  10. 计算机中完成全选的快捷键,怎么全选-很实用!word中全选的快捷键介绍及使用方法...
  11. 图形世界分裂的两派 理清Direct3D和OpenGL的脉络
  12. Web 开发技术文档大全
  13. Dom对象和java
  14. Origin色卡(oth、pal格式)
  15. Mars3D之三维空间视角
  16. CUDA版本降级操作(记录)
  17. 比较图像相似的三种方法
  18. 栈溢出漏洞CVE-2020-8423复现
  19. 深入理解CSS定位中的偏移
  20. 短视频营销是什么?为什么现在这么火?

热门文章

  1. app配置智能硬件的解决方案
  2. android---am命令
  3. jquery 判断数据是否重复
  4. 【JFreeChart】JFreeChart—输出折线图
  5. 【译】ES2018 新特性: 正则表达式的 s (dotAll) 标志
  6. python if语句
  7. 将一个大文件分成若干个小文件方法
  8. 关于ASP.NET的web.config的小笔记
  9. 30多年程序员生涯经验总结(成功源自于失败中的学习;失败则是因为容忍错误的横行)...
  10. Java认证授权框架Spring Security介绍