rabbitmq 發布訂閱模式

2021-08-21 03:24:02 字數 2326 閱讀 4245

上篇我們已經講過了工作模式和簡單模式的用法。而這節我們就要開始講一下後面三種的第一種,在我們平常開發中,其實用的比較多的是後面的這三種。

發布訂閱模式:英文叫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...