rabbitmq 传递文件_使用RabbitMQ进行消息传递
rabbitmq 傳遞文件
RabbitMQ是一個強大的消息代理,可用于實現(xiàn)不同的消息傳遞模式。 即使有出色的教程 (使用不同的語言和框架),也很難理解這些概念。 在這篇文章中,我想展示一些可以用RabbitMQ實現(xiàn)的不同范例,以及為什么要為某些概念而苦惱。
使用隊列發(fā)送和接收
最簡單的方法是使用隊列發(fā)送消息,并讓使用者從同一隊列中讀取數(shù)據(jù)。
沒有什么可以阻止您擁有多個使用者,每個使用者都可以處理隊列中的消息。 使用完一條消息后,該消息將從隊列中消失。
當(dāng)具有需要執(zhí)行的任務(wù)并且無論哪個消費者處理任務(wù)都無關(guān)緊要時,這特別適合。
發(fā)布/訂閱
并非所有用例都只消耗一條消息的方式。 通常,您希望擁有多個應(yīng)該全部處理所有消息的使用者。 一個示例可以是將對象存儲在不同的數(shù)據(jù)存儲中(例如,搜索索引和數(shù)據(jù)庫),另一種是域事件,例如已提交并應(yīng)由訂單管理系統(tǒng)和庫存系統(tǒng)處理的訂單。 這需要一種發(fā)布/訂閱機制,RabbitMQ當(dāng)然已經(jīng)涵蓋了這一點。
與僅使用隊列相比,最大的區(qū)別是在這種情況下,生產(chǎn)者不再直接寫隊列。 一個稱為Exchange的實例將接受郵件并將其轉(zhuǎn)發(fā)到一個或多個隊列。
要使用經(jīng)典的發(fā)布/訂閱模型,您可以使用FanoutExchange將消息轉(zhuǎn)發(fā)到一個或多個隊列。 要連接交換和隊列,您需要聲明一個綁定,在這種情況下,特定交換的所有消息都應(yīng)轉(zhuǎn)發(fā)到特定隊列。
每個使用者都從專用隊列中讀取消息。 這也意味著您將需要為每個正在監(jiān)聽的使用者綁定一個綁定。
使用RabbitMQ,可以使用在使用者停止監(jiān)聽時自動刪除的隊列。 這允許消費者加入和離開時具有非常動態(tài)的行為。
看我們的第一個示例,您可能想知道為什么有不同的方式來發(fā)送消息,發(fā)送隊列和進行交換。 事實證明,發(fā)送到隊列確實是不可能的。 總是存在一個默認(rèn)交換,它僅轉(zhuǎn)發(fā)消息。 此默認(rèn)交換僅獲取消息的某個路由鍵(即隊列名稱),然后將它們以相同的名稱放入隊列中。
發(fā)布/訂閱過濾
除了將消息發(fā)送到已注冊進行交換的所有隊列之外,還可以根據(jù)路由密鑰對消息進行過濾。 所有消息都被發(fā)送到一個交換機,該交換機通過查看路由鍵來決定將消息發(fā)送到哪個隊列。
如果您想與路由鍵完全匹配,請執(zhí)行DirectExchange。
將DirectExchange綁定到隊列時,您需要提供一個路由密鑰,該路由密鑰將確定將為此隊列考慮的路由密鑰。 如果要分配多個路由鍵,則可以為同一隊列添加多個綁定。
您還可以提供通配符來確定應(yīng)將哪些路由密鑰用于隊列,這可以通過使用需要分層路由密鑰的TopicExchange來完成。
一開始,這兩個交流-直接交流和主題交流-可能最讓我感到困惑。 當(dāng)涉及到主題時,我正在考慮經(jīng)典的發(fā)布訂閱系統(tǒng),例如使用FanoutExchange時。 交換名稱是客戶端正在注冊的主題。 但是這里的主題是指在現(xiàn)有交換機上的一種路由。 與DirectExchange相同:我希望直接交換類似于第一個直接將消息發(fā)送到隊列的示例。 但是在這種情況下,直接交換是指直接路由,因此您始終需要為此提供路由密鑰。
如果您想進一步了解各種交流,請轉(zhuǎn)到RabbitMQ網(wǎng)站上的教程 。
翻譯自: https://www.javacodegeeks.com/2018/03/messaging-with-rabbitmq-2.html
rabbitmq 傳遞文件
總結(jié)
以上是生活随笔為你收集整理的rabbitmq 传递文件_使用RabbitMQ进行消息传递的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 类似cs扫描全能王的电脑软件(cs全能扫
- 下一篇: 阿帕奇跨域_阿帕奇齿轮泵