Fanout交换器-搭建环境
生活随笔
收集整理的這篇文章主要介紹了
Fanout交换器-搭建环境
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
我們講一下RabbitMQ中的第三種交換器,Fanout交換器,相比上兩種我們講過的交換器,最大的特點它是以廣播的模式,來做消息的傳遞,我們來看一下這樣的需求,我這里有一個訂單服務,然后還有一個短信服務,還有一個push服務,比如用戶購買商品以后,我們的系統創建訂單了,這個時候訂單服務呢,要向短信服務發送信息,發送消息,短信服務平臺再給用戶發送短信,然后訂單服務平臺還要去調push平臺的接口,然后push服務再去向用戶push消息,那么我們現在所看到的這個圖呢,是一個傳統上的一個設計,什么意思呢,當用戶創建完訂單以后,訂單服務要去調用短信服務平臺的接口,然后再去調用push平臺的接口,也就意味著這兩個平臺的接口,都是在我訂單平臺服務上去調用的,那么也就是說,現在我的訂單服務平臺,和短信服務平臺,push服務平臺,其實我們三個是緊耦合的,那么這種傳統上的一個設計呢,它是不太人性化的,未來我們還得去做改造,那么怎么去化解這種尷尬的問題呢
我們可以加入消息隊列,來解決這個問題,還是訂單服務,短信服務,push服務,三個服務,然后現在呢,訂單服務再發消息的時候,并不是直接調用短信服務和push服務的接口了,而是交給了中間的消息隊列,然后消息隊列接收信息以后,我們現在的要求是,訂單服務的消息,既要傳遞給短信服務,也要傳遞給push服務,然后他兩還不能公用一個服務,我還是給他分配兩個隊列短信服務走短信服務的隊列,push服務走push服務的隊列,那么也就意味著,我的訂單服務,要將信息傳遞到兩個不同的平臺下,都要傳遞的話,那要怎么辦呢,我們肯定要換交換器了,我們這個時候換一個誰呢,type=fanout,換一個廣播模式的交換器,那么廣播模式的交換器是什么意思呢,你訂單服務發給我信息的時候,將消息一并的放到這兩個隊列當中,或者你有三個四個五個都可以,我都可以將隊列中發送信息,這樣其他的平臺,只要訂閱了相應的的隊列,那么就可以訂閱相關的服務和信息,就這樣的一個過程,我們可以通過RabbitMQ,消息隊列,來解決我們剛才說的尷尬的問題,這樣完全是一個松耦合的設計了,我的訂單服務,再也不用去調用短信服務和push服務的接口了,我們二者之間的交互,完全通過中間的消息中間件,來做信息傳遞,那么我們就按照這個需求去做一個實現,我們還是兩個項目
一個是訂單服務,一個是消息接收者,我們的consumer,然后我們通過消息隊列,來進行信息的傳遞,并且我們配的交換器是fanout交換器,打開我們的eclipse,我們首先去創建兩個項目,還是從我們之前講的direct,從這做一個拷貝,快速的構建兩個項目,我們先來一個consumer,然后我們這里改一個名稱rabbitmq-fanout-consumer然后打開他的pom文件,我們對artifactId和name做一個修改,然后其他的我們就不用動了,然后我們再去創建一個Provider,rabbitmq-fanout-provider然后還是修改一下pom文件,這樣我們就創建好了兩個項目,搭建環境,第一個創建項目,然后我們接下來修改配置文件,我們先來看Consumer的配置文件,首先我們的交換器名稱是不是需要換一下了mq.config.exchange=order.fanout
mq.config.queue.sms=order.sms
mq.config.queue.push=order.push我們現在還叫log.direct,然后我們看一下這個圖,我們圖里面是創建訂單服務的一個消息處理,我們現在是order.表示什么呢,這個交換器叫fanout,然后隊列名稱我們得改一下,那么這個隊列名稱也不是什么info了,做日志處理了,我們會有兩條隊列,一個是短信服務的隊列,一個是push服務的隊列,那我們就給這兩個隊列起個名字,比如sms表示是短信的隊列,order的sms,然后廣播模式,就是我們的fanout交換器,他沒有路由鍵,所以把路由鍵給刪掉,然后這個也不是error了,是push,是order.push,然后他也沒有路由鍵,這樣就配置完了,所以用fanout交換器,對于我們的配置文件來講,配置項少很多,我們把它copy一下,粘到我們的筆記當中,這個是consumer的配置文件,然后我們再來看Provider的,找到他的appliaction.properties,首先這個是要換一下mq.config.exchange=order.fanout他也要和consumer里面相同的交換器,那也要有相同交換器的名稱,也是order.fanout,然后他也沒有路由鍵,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-fanout-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-fanout-providerspring.rabbitmq.host=59.110.158.145
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guestmq.config.exchange=order.fanout
<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-fanout-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-fanout-consumerspring.rabbitmq.host=59.110.158.145
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guestmq.config.exchange=order.fanout
mq.config.queue.sms=order.sms
mq.config.queue.push=order.push
?
超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生總結
以上是生活随笔為你收集整理的Fanout交换器-搭建环境的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Topic交换器-编写消费者
- 下一篇: Fanout交换器-编写消费者