rabbitMQ與spring整合在專案中使用
阿新 • • 發佈:2019-01-03
rabbitMQ與spring整合
1、引入spring-rabbit依賴
<dependency>
<groupId>org.springframework.amqp</groupId>
<artifactId>spring-rabbit</artifactId>
<version>1.5.1.RELEASE</version>
</dependency>
2、對應spring的版本4.2.8.RELEASE
3、配置sping-mq.xml配置檔案
<rabbit:connection-factory id="connectionFactory"
host="${mq.host}" port="${mq.port}" username="${mq.username}" password="${mq.password}" />
<rabbit:admin connection-factory="connectionFactory" />
<!-- 模板類需要自己重新定義,exchange需要重新制定並在下方定義,routing-key需要重新指定,並與下方exchange中的key保持一致 -->
<!-- 定義template start -->
<rabbit:template id="test-template"
connection-factory="connectionFactory" exchange="test.exchange" />
<!-- 定義template end -->
<!-- 定義queue start -->
<rabbit:queue name="test.a.queue" />
<rabbit:queue name="test.b.queue" />
<!-- 定義queue end -->
<!-- exchange重新定義並與上邊的模本中保持一致,binding中的queue和key也要用自己重新定義的 start -->
<rabbit:fanout-exchange name="test.exchange">
<rabbit:bindings>
<rabbit:binding queue="test.a.queue" />
</rabbit:bindings>
</rabbit:fanout-exchange>
<rabbit:listener-container connection-factory="connectionFactory" concurrency="10" prefetch="5">
<rabbit:listener queue-names="test.a.queue" method="listen" ref="testListener" />
</rabbit:listener-container>
<!-- listener配置 -->
<bean id="testListener" class="org.t.TestListener"/>
此時可以使用test-template向exchange中推送訊息,exchange接收到訊息後向其繫結的佇列進行訊息投遞。
exchange有兩種型別:
a. fanout型別的exchange,該型別的exchange會對其繫結的佇列進行廣播(即當前exchange繫結的所有佇列都會被投遞)
b. direct型別的exchange,改型別的exchange會根據key投遞到不同的佇列(key可以使用萬用字元,具體參考文件)
使用rabbitMQ時候遇到的問題
1 監聽b佇列,向a佇列推送訊息,結果監聽器也可以監聽到訊息
原因:要通過rabbitMQ提供的網頁管理工具檢查該exchange繫結到哪些queue上去了,要保證該exchange只向a佇列投遞,而不是既綁定了a佇列又綁定了b佇列。