上篇我們已經講過了工作模式和簡單模式的用法。而這節我們就要開始講一下後面三種的第一種,在我們平常開發中,其實用的比較多的是後面的這三種。
發布訂閱模式:英文叫publish/subscribe,發布訂閱模式也稱為廣播模式,在exchange下屬於fanout模式。廣播,大家應該都知道吧,在mq中,其實就是乙個生產者對應n個消費者,可能仔細的人就會發現我們的工作模式也是一對多的,那麼這兩者有什麼關係呢?
發布訂閱模式的結構圖:
這個x表示的就是我們之前所說的交換機,他並不是將訊息直接傳送給佇列的,而是通過交換機,然後通過交換機繫結佇列,在傳送到佇列。從這個圖就發現了,這個模式和工作模式的區別吧,乙個是發到多個訊息佇列,乙個是只發到乙個佇列,多個消費者去消費的。
可能有人會問這種模式有什麼用呢?1、首先是引入mq的依賴
org.springframework.bootgroupid>
spring-boot-starter-amqpartifactid>
dependency>
.name=mq-queqe
server.port=1111
spring.rabbitmq
.host=localhost
spring.rabbitmq
.port=5672
spring.rabbitmq
.username=guest
spring.rabbitmq
.password=guest
到此為止,我們的mq的配置就完成了
3、去實現具體的業務邏輯,首先我們定義乙個傳送訊息的介面
private
static string exchange_name="hello111";
@autowired
amqptemplate amqpt;
public
void
test() throws interruptedexception
system.err.println("訊息傳送成功");
}
4、同時我們還要去寫乙個配置類,因為到目前為止我們訊息是能夠傳送成功,但是接收訊息的呢,訊息應該怎麼傳送呢,我們並沒有指定,所以我們還需要指定傳送的地方。
@configuration
public
class
confi
@bean
public queue queue1()
//宣告乙個fanout的交換機
@bean
public fanoutexchange fanoutexchange()
//將佇列和互動機進行繫結
@bean
public binding bindfanout(queue queue,fanoutexchange fanoutexchange)
@bean
public binding bindfanout1(queue queue1,fanoutexchange fanoutexchange)
}
到這步的時候,我們就完成了訊息的傳送,以及該傳送到什麼位置。
5、接下來我們就需要定義消費者。
@service
@rabbitlistener(queues="hello") //這個佇列就是我們之前定義的佇列名稱,監聽hello佇列的訊息
public
class
receive1
}
另乙個消費者為
@service
@rabbitlistener(queues="hello1")
public
class
receive2
}
然後我們啟動我們的專案,並在瀏覽器去訪問介面,讓他傳送訊息,這時候我們可以看到控制台出現兩個消費者消費的訊息,到此我們的廣播模式也實現完成了。
但是我們之前說過有個routingkey的東西,其實這個routingkey是用於交換機和佇列的繫結,而我們fanout模式是算比較特殊的把,他不是通過routingkey來使佇列和互動機連線,而是直接通過交換機和佇列繫結,但是之後兩種模式會基於routingkey來實現交換機和佇列的繫結
RabbitMQ發布 訂閱模式
1 生產者 package com.ys.ps import com.rabbitmq.client.channel import com.rabbitmq.client.connection import com.ys.utils.connectionutil create by ysocean ...
RabbitMQ 發布 訂閱
rabbitmq 中訊息傳遞模型的核心思想是 生產者永遠不會將任何訊息直接傳送到佇列。實際上,生產者通常甚至不知道訊息是否會被傳遞到任何佇列。相反,生產者只能向交易所 exchanges 傳送訊息。交換是一件非常簡單的事。一方面,它接收來自生產者的訊息,另一方面將它們推送到佇列。交易所必須確切知道如...
RabbitMQ之訂閱模式
rabbitmq之訂閱模式簡介 乙個生產者,多個消費者 每乙個消費者都有自己的佇列 生產者沒有直接將訊息傳送到佇列中去,而是傳送到了交換機或者 器 exchange 中 每個佇列都要繫結到交換機上 生產者傳送的訊息,經過互動機到達佇列就能實現乙個訊息被多個消費者消費 參考 生產者 訂閱模式 auth...