1. 程式人生 > >rabbitMQ與spring整合在專案中使用

rabbitMQ與spring整合在專案中使用

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佇列。