Topic和Direct Fanout匹配解析

2022-03-03 23:42:56 字數 1744 閱讀 2722

rabbitmq詳解

1. direct exchange

direct exchange是rabbitmq預設的交換機模式,也是最簡單的模式,根據key全文匹配去尋找佇列。

q1 繫結了乙個binding key名字為orange

q2 就有 2 個binding key,名字為blackgreen

當訊息中的 路由鍵 和 這個 binding key 對應上的時候,那麼就知道了該訊息去到哪乙個佇列中。

channel channel = connection.createchannel();  

channel.exchangedeclare("retry_payment", "direct"); //宣告乙個交換機,direct 可以換位topic或者是fannout

channel.queuedeclare("retry_payment"); //宣告乙個佇列

channel.queuebind("queuename", "exchangename", "routingkey"); //繫結路由鍵

//需要繫結路由鍵,傳送訊息

byte messagebodybytes = "hello world"

.getbytes();

channel.basicpublish("exchangename", "routingkey", messageproperties.persistent_text_plain, messagebodybytes);

2.topic exchangetopic exchange **訊息主要是根據萬用字元。 在這種交換機下,佇列和交換機的繫結會定義一種路由模式,那麼,萬用字元就要在這種路由模式和路由鍵之間匹配後交換機才能**訊息。

在這種交換機模式下:

具體**傳送的時候還是一樣,第乙個引數表示交換機,第二個引數表示routing key,第三個引數即訊息。如下:

rabbittemplate.convertandsend("testtopicexchange","key1.a.c.key2", " this is  rabbitmq!");
topic 和 direct 類似, 只是匹配上支援了」模式」, 在」點分」的 routing_key 形式中, 可以使用兩個萬用字元:

3.fanout exchange

不處理路由鍵。你只需要簡單的將佇列繫結到交換機上。乙個傳送到交換機的訊息都會被**到與該交換機繫結的所有佇列上。很像子網廣播,每台子網內的主機都獲得了乙份複製的訊息。fanout交換機**訊息是最快的。

傳送訊息,只需要指定交換機,route key可以為空

給訊息設定屬性值

設定請求頭或者編碼

messageproperties messageproperties=message.getmessageproperties();

kafka的Topic和日誌

kafka中所有訊息是通過topic為單位進行管理,每個kafak的topic通常會有多個訂閱者,負責訂閱傳送到該topic的資料。kakfa負責管理集群中每個topic的一組日誌分割槽資料 生產者將資料傳送到相應的topic。負責定址將哪個分割槽傳送到topic的哪個partion?例如 roun...

Topic匹配模式

topic型別的交換器允許在rabbitmq中使用模糊匹配來繫結自己感興趣的資訊 星號 表示乙個單詞 井號 表示零個或者多個單詞 傳送訊息 for string severity routingkeys catch exception e finally catch exception ignore...

徹底刪除topic

1 刪除kafka儲存目錄 server.properties檔案log.dirs配置,預設為 tmp kafka logs 相關topic目錄 2 kafka 刪除topic的命令是 bin kafka topics delete zookeeper zookeeper server topic ...