RaDirect交换器-搭建环境
生活随笔
收集整理的這篇文章主要介紹了
RaDirect交换器-搭建环境
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
我們看一下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
?
超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生總結
以上是生活随笔為你收集整理的RaDirect交换器-搭建环境的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: RabbitMQ原理讲解
- 下一篇: Direct交换器-编写消费者