發表文章

[RabbitMQ] Work Queue

圖片
上一篇 分享了RabbitMQ的基礎知識, 包含一些名詞解釋、message從生產者到消費者的流程、生產者與消費者的java程式. 接下來要講的是Work Queue模型, Work Queue, 顧名思義就是生產者產生訊息接著由眾多消費者消費的模型. 我們先將上一篇的程式稍微改一下 public static void main(String[] args) throws Exception { String host = "192.168.1.103"; Thread consumerThread1 = new Thread(new Consumer(host, "consumerThread1")); Thread consumerThread2 = new Thread(new Consumer(host, "consumerThread2")); Thread consumerThread3 = new Thread(new Consumer(host, "consumerThread3")); consumerThread1.start(); consumerThread2.start(); consumerThread3.start(); Thread.sleep(3000); Thread producerThread = new Thread(new Producer(host)); producerThread.start(); System.out.println("Finish"); } 讓3個消費者先執行, 接著生產者產生9筆message. 把生產者內的這行註解掉, 以免資訊太多太亂. System.out.println("Producer Sent " + i); 接著執行看結果

[RabbitMQ] 基本教學

圖片
   開始基本教學之前請先安裝RabbitMQ, 各平台的安裝請 參考 , 假如你跟我一樣懶得自己按部就班安裝可以使用docker快速布署, 請 參考 . (可以先簡單的安裝附帶web管理介面的版本, 我自己是安裝 3.7.2-management) RabbitMQ是什麼? RabbitMQ是一個訊息中介軟體 (broker), 他就像郵局一樣的存在, 主要用來處理應用程序之間消息的儲存與轉發, 消息是基於二進制的, 這意味著你的消息不見得是純文字. RabbitMQ是AMQP標準的實作, 特點是消息轉發是非同步的, 並且可靠. 名詞解釋 生產者 (Producer): 為訊息產生的一方, 訊息由生產者產生並發送 (producing)至RabbitMQ. 消費者 (Consumer): 為接收訊息後展開處理的一方. 消息列隊 (Queue): RabbitMQ比喻為郵局的話Queue就是郵桶, 負責列隊 (先進先出)收到的消息. 交換器 (Exchange): 當想要將消息投遞到列隊時通過把消息發送到交換器來完成, 根據確定的規則RabbitMQ會決定該將消息投遞到哪個列隊. 路由鍵 (Routing Key): 當把消息投遞到MQ時訊息會夾帶一個路由鍵, 交換器負責將其與對應的列隊進行匹配, 如果匹配那消息就會投遞到該列隊中. 交換器類型 一共有4種類型, direct、fanout、topic與headers. 每一種類型都實現了不同的路由規則, 先介紹direct類型就好, 其他類型之後再開新帖介紹.  direct交換器非常簡單, 規則如下: 假如路由鍵匹配列隊的話消息就被投遞到對應的列隊之中. RabbitMQ包含一個空白字串名稱的默認交換器, 當宣告一個列隊時會自動綁定到默認交換器, 並以列隊名稱作為路由鍵. 消息投遞流程 生產者產生消息-->發送至RabbitMQ-->交換器-->解析routing key找到對應的列隊-->投遞至對應列隊-->消費者接收訊息-->處理訊息 理論的部分到此為止, 接下來直接來實作一個下圖的範例 首先創建一個maven專案, 在pom中新增rabbitmq依賴. 用的是