rabbitmq常用的3種模式
阿新 • • 發佈:2018-12-25
1.fanout(廣播,釋出訂閱)
傳送到exchange的所有訊息會被轉發到與exchange繫結的所有queue,不需要處理路由
路由的作用:exchange會根據路由匹配佇列,傳送一個訊息到交換機的時候,交換機根據路由傳送到匹配這個路由的佇列中去
1.public Binding FanoutBinding1() {
return BindingBuilder.bind(topicQueue1()).to(fanoutExchage());
繫結的時候並沒有通過路由
2.傳送的方法:
amqpTemplate.convertAndSend(MQConfig.FANOUT_EXCHANGE, “”, msg);
可以看出只要是和交換機繫結的路由都會收到訊息。
2.topic(匹配)
exchang和queue需要進行繫結操作,
可以進行模糊匹配
1.public Binding topicBinding2() {
return BindingBuilder.bind(topicQueue2()).to(topicExchage()).with(“topic.#”);
繫結的時候需要通過路由“.with(“topic.#”);”
2.amqpTemplate.convertAndSend(MQConfig.TOPIC_EXCHANGE, “topic.key1”, msg+”1”)
可以看出:傳送訊息需要指出交換機和路由,交換機通過這個路由去和1中的.with(“topic.#”);去比較,若是滿足才可以傳送到佇列
3.direct(轉發)
可以使用自帶的exchange,不需要將exchange和queue進行繫結操作,routykey必須完全匹配
1.只需要定義一個佇列即可,不需要交換機和佇列進行繫結操作
2.amqpTemplate.convertAndSend(MQConfig.QUEUE, msg);
可以看出只需要一個路由引數“MQConfig.QUEUE”,佇列的路由需要和這個完全匹配才可以。
實現的方式:
配置檔案中連線伺服器
建立exchange(建立交換機)
建立queue(佇列)
exchange和queue的繫結 通過一個字串型別的routingkey
實現生產者:
重要的方法是:void convertAndSend( String routingKey, Object message)
根據指定的路由傳送到指定的和這個路由匹配的交換機,交換機繫結著佇列
實現消費者:
通過listening始終監聽者某一個佇列
先開啟接收端,再開啟服務端