Fanout交换器-编写消费者
生活随笔
收集整理的這篇文章主要介紹了
Fanout交换器-编写消费者
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
我們已經把環境搭建好了,我們就來編寫Provider和Consumer,我們首先 來編寫Consumer,然后回到我們的代碼當中,我們看一下配置文件,在這個配置文件當中呢,配置了交換器的名稱mq.config.exchange=order.fanout
mq.config.queue.sms=order.sms
mq.config.queue.push=order.push配置了短信隊列名稱,短信平臺服務隊列名稱,這個是push服務隊列名稱,我們把它更新到自己的服務平臺當中,那么這兩個名稱大家應該知道表示什么了,是我們看到的這兩個Queue的名稱,我們打算給這兩個Queue取這兩個名字,然后交換器起的名字,現在我們-直接拷貝direct項目下的,還是日志記錄的Receiver,那我們是不是要把這兩個Receiver給改一下,首先名稱我們不能叫InfoReceiver,比如我們先去做短信服務,SmsReceiver,然后ErrorReceiver,就是Push服務的,PushReceiver,首先名字改好以后呢,接下來我們再看,在@RabbitListener我們該怎么沒去做呢,首先第一個value這一塊,綁定了隊列的名稱,現在還是info這里是不是得改了,那這里綁誰呢,看我們的配置文件,這里是不是要綁sms所對應的value,因為我們給隊列起名叫sms嗎,所以這塊是sms,這是要改動的第一個地方,第二個地方是exchange,這個值不用動吧,這個key值不就是他嗎,所以這個名字就不用動,我們已經改好了mq.config.exchange=order.fanout關鍵是type這里,type我們這里用的還是direct,得把它改成fanout,然后再往后看,這里還有一個key的屬性,這個key表示的是什么,我們之前也說過,這個key就是標示路由鍵,其實我們通過寫前兩個案例,direct和topic的,應該也能體會到路由鍵的特點,其實路由鍵的特點就是告訴交換器,現在我要將哪個信息交換到哪個隊列當中,那我們現在用的fanout,它是廣播模式,所有的隊列都要有,既然所有隊列都要有了,還有區分這個概念嗎,就沒有了,沒有區分這個概念,那么路由鍵就不需要存在了,是的,這塊大家需要注意,在我們的fanout交換器當中,不需要路由鍵的,如果你要給他加路由鍵,不是廣播模式了,那就是根據你特定的路由鍵,將信息發送到指定的隊列當中了,就是特定的隊列當中了,并不是將消息傳遞到所有的消息隊列當中了,所以一定要注意,我們一定要把路由鍵給刪掉,@RabbitListener(bindings=@QueueBinding(value=@Queue(value="${mq.config.queue.sms}",autoDelete="true"),exchange=@Exchange(value="${mq.config.exchange}",type=ExchangeTypes.FANOUT)))這樣一個sms的服務就修改完了,然后我們在這里再改一改這個名字,@RabbitHandler
public void process(String msg){System.out.println("Sms........receiver: "+msg);
}然后PushReceiver,這個也是同樣的道理,首先需要把消息隊列的名稱給改一下,這個叫pushvalue="${mq.config.queue.push}"應該是叫push,然后這兒,type=ExchangeTypes.FANOUT,這個應該是fanout,然后他也是沒有key,沒有路由鍵,有路由鍵的反而收不到消息的,我們現在把這個代碼粘到筆記當中@RabbitListener(bindings=@QueueBinding(value=@Queue(value="${mq.config.queue.push}",autoDelete="true"),exchange=@Exchange(value="${mq.config.exchange}",type=ExchangeTypes.FANOUT))
)這個是smsReceiver,然后接下來是PushReceiver,這樣我們的Consumer就編寫完了,我們建立了兩個模擬服務的類,一個是SmsReceiver,一個是PushReceiver,然后把它標記一下,在這里,這一塊${mq.config.queue.sms}是需要改變的,第二個就是這個type=ExchangeTypes.FANOUT,交換器的類型,這兒也是,value="${mq.config.queue.push}",這塊需要改動一下,然后還有交換器的類型type=ExchangeTypes.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
package com.learn;import org.springframework.amqp.core.ExchangeTypes;
import org.springframework.amqp.rabbit.annotation.Exchange;
import org.springframework.amqp.rabbit.annotation.Queue;
import org.springframework.amqp.rabbit.annotation.QueueBinding;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;/*** 消息接收者* @author Administrator* @RabbitListener bindings:綁定隊列* @QueueBinding value:綁定隊列的名稱* exchange:配置交換器* key:路由鍵* * @Queue value:配置隊列名稱* autoDelete:是否是一個可刪除的臨時隊列* * @Exchange value:為交換器起個名稱* type:指定具體的交換器類型*/
@Component
@RabbitListener(bindings=@QueueBinding(value=@Queue(value="${mq.config.queue.sms}",autoDelete="true"),exchange=@Exchange(value="${mq.config.exchange}",type=ExchangeTypes.FANOUT)))
public class SmsReceiver {/*** 接收消息的方法。采用消息隊列監聽機制* @param msg*/@RabbitHandlerpublic void process(String msg){System.out.println("Sms........receiver: "+msg);}
}
package com.learn;import org.springframework.amqp.core.ExchangeTypes;
import org.springframework.amqp.rabbit.annotation.Exchange;
import org.springframework.amqp.rabbit.annotation.Queue;
import org.springframework.amqp.rabbit.annotation.QueueBinding;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;/*** 消息接收者* @author Administrator* @RabbitListener bindings:綁定隊列* @QueueBinding value:綁定隊列的名稱* exchange:配置交換器* * @Queue value:配置隊列名稱* autoDelete:是否是一個可刪除的臨時隊列* * @Exchange value:為交換器起個名稱* type:指定具體的交換器類型*/
@Component
@RabbitListener(bindings=@QueueBinding(value=@Queue(value="${mq.config.queue.push}",autoDelete="true"),exchange=@Exchange(value="${mq.config.exchange}",type=ExchangeTypes.FANOUT)))
public class PushReceiver {/*** 接收消息的方法。采用消息隊列監聽機制* @param msg*/@RabbitHandlerpublic void process(String msg){System.out.println("Push..........receiver: "+msg);}
}
package com.learn;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class RabbitFanoutConsumerApplication {public static void main(String[] args) {SpringApplication.run(RabbitFanoutConsumerApplication.class, args);}
}
?
總結
以上是生活随笔為你收集整理的Fanout交换器-编写消费者的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Fanout交换器-搭建环境
- 下一篇: Fanout交换器-编写生产者