golang使用rabbitmq(三)發布 訂閱

2021-10-01 01:28:50 字數 1350 閱讀 1151

rabbitmq訊息傳遞模型的核心是生產者永遠不會把訊息直接傳送到某個佇列上,甚至根本不知道訊息是否傳送到佇列上。生產者只向交換器傳送訊息。

交換器來決定怎麼處理訊息,是把訊息傳遞到特定的佇列,還是把訊息傳到多個佇列,或者直接丟棄訊息,這一切取決於交換器的型別。

交換器的型別有四種:direct, topic, headers, fanout。在這裡我們只講fanout這一種,fanout型別非常簡單,他會把訊息發到所有他知道的佇列。(之前我們用的是)

定義交換器:

err = ch.

exchangedeclare

("logs"

, amqp.exchangefanout,

true

,false

,false

,false

,nil

)failonerror

(err,

"failed to declare an exchange"

)

然後把訊息發到交換器

body :=

bodyfrom

(os.args)

err = ch.

publish

("logs",""

,false

,false

, amqp.publishing

)failonerror

(err,

"failed to publish a message"

)

在之前的文章中,佇列都有乙個名字,但是有些情況下佇列名字並不重要,因為只要訂閱訊息即可fanout會把訊息發給他所有知道的佇列。傳入乙個空字串,rabbit會幫我們生成乙個隨機的佇列名。

q, err := ch.

queuedeclare(""

,false

,false

,true

,false

,nil

)failonerror

(err,

"failed to declare a queue"

)

現在交換器和佇列都有了,使佇列成為交換器"已知"的過程過程就叫做繫結:

err = ch.

queuebind

(q.name,"",

"logs"

,false

,nil

)failonerror

(err,

"failed to bind a queue"

)

現在啟動多個訂閱者,但是只發布一條訊息,多個訂閱者都會收到相同的訊息。

mac 使用docker 安裝 rabbitmq

專案要用到rabbitmq 官網說brew install 但是brew update就半天都不成功,突然想起了docker,以前用過一點點,就試著來了一下 docker search rabbitmq management docker pull rabbitmq management docke...

CentOS 使用yum安裝rabbitmq

rabbitmq erlang版本要求 rabbitmq erlang name rabbitmq erlang baseurl gpgcheck 1 gpgkey repo gpgcheck 0 enabled 1 然後執行 sudo yum install erlang 即可安裝 執行 erl ...

erlang jcl遠端除錯 rabbitmq

job control mode jcl in which jobs can be started,stopped,detached or connected.only the current job can communicate with the shell.通過jcl,我們可以遠端接入乙個er...