RabbitMQ fanout廣播模式

2021-09-13 23:57:43 字數 1560 閱讀 5743

fanout: 所有bind到該交換機的佇列都可以接收訊息。

訊息的接受者需要建立乙個佇列,繫結到該fanout交換機上,監聽來自傳送端的訊息廣播。fanout模式和topic模式基本是一樣的,唯一的乙個區別在於topic可以根據不同的主題路由到不同的佇列,但是fanout模式是沒有路由這個過程的,所有繫結到該交換機上的佇列都會收到這一條廣播訊息。

基於上文中封裝的rabbitmq**rabbitmq c++封裝,在此實現fanout廣播訊息的傳送和訊息。

傳送端**:

std::string err;

//mq連線

crabbitmqclient mqclient;

if (0 != mqclient.connect(err))

//宣告交換機

cexchange exchange(exchange_name, "fanout", true, false);

if (0 != mqclient.declareexchange(exchange, err))

amqp_basic_properties_t properties;

getproperties(properties);

for (int i = 0; i < 5; i++)

//printf("傳送訊息成功:%s\n", szbuf);

}

消費端**,需要找到對應的交換機,並建立屬於自己的佇列,繫結到該交換機上,進行廣播訊息的接收:

std::string err;

//mq連線

crabbitmqclient mqclient;

if (0 != mqclient.connect(err))

//宣告交換機

cexchange exchange(exchange_name, "fanout", true, false);

if (0 != mqclient.declareexchange(exchange, err))

//宣告佇列

cqueue queue(queue_name);

if (0 != mqclient.declarequeue(queue, err))

//佇列繫結到交換機上

if (0 != mqclient.bindqueuetoexchange(queue, exchange, routing_keys_name, err))

do } while (1);

消費端需要宣告乙個和生產端一模一樣的交換機(包括交換機的名稱,屬性),然後再宣告乙個臨時佇列(各個消費者需要各自宣告乙個唯一佇列,因為rabbitmq只會把訊息傳送到乙個佇列一次,比如:comsumer1和comsumer2宣告了同乙個佇列,producer生產了3條訊息,那麼可能comsumer1收到了2條,comsumer2收到了1條;也有可能comsumer1收到了3條,comsumer2一條都沒收到),繫結到該互動機上,在乙個while迴圈中不停消費該佇列上的訊息。

rabbitmq fanout廣播模式

publisher端 py import pika import sysconnection pika.blockingconnection pika.connectionparameters host localhost channel connection.channel channel.exc...

RabbitMQ fanout廣播交換器模式

當訂單服務向交換器傳送請求的時候,需要簡訊服務和push服務進行工作,如果使用傳統的服務呼叫的話,是強耦合不利於擴充套件開發,此時可以使用rabbitmq提供的交換器中的fanout 廣播模式 進行解決,中介軟體通過廣播模式同時將請求放入訂單服務的佇列中。進行業務的處理 fanout不會進行路由鍵匹...

SpringBoot websocket廣播式應用

1 建立乙個簡單的springboot 專案,推薦使用idea,這裡我只選擇了websocket,thymeleaf。2 配置websocket,需要使用 enablewebsocketmessagebroker 註解開啟stomp協議來傳輸基於 message broker 的訊息,並通過實現we...