原文出處: Listen
RabbitMQ是一個訊息中介軟體,在一些需要非同步處理、發布/訂閱等情境的時候,使用RabbitMQ可以完成我們的需求。 下面是我在學習RabbitMQ的過程中的一些記錄,內容主要翻譯自RabbitMQ官網的Tutorials, 再加上我的一些個人理解。我將會用三篇文章來從RabbitMQ的Hello World介紹起,到最後的通過RabbitMQ實現RPC調用, 相信看完這三篇文章大家應該會對RabbitMQ的基本概念和使用有一定的瞭解。
說明: 由於RabbitMQ支援許多種語言的client,在這裡我使用的是Java語言的client。 所有的圖片均來自RabbitMQ官網。 Hello World
首先需要安裝RabbitMQ,關於RabbitMQ的安裝這裡就不贅述了,可以到RabbitMQ的官網去看相應的OS的安裝方法。 安裝完成後使用rabbitmq-server即可啟動RabbitMQ,RabbitMQ還提供了一個UI管理介面,本地預設的地址為localhost:15672, 使用者名稱和密碼均為guest。
安裝完成之後,按照慣例,先來完成一個簡單的Hello World的例子。 最簡單的一種訊息發送的模型為一個訊息寄件者(Producer)將訊息發送到Queue中,另一端的訊息接受者(Consumer)從Queue中接受訊息, 大致模型如下圖所示:
先來看發送的代碼,建立一個類命名為Send.java,代碼的第一步為串連server 1 2 3 4 ConnectionFactory factory = new ConnectionFactory(); factory.setHost( "localhost" ); Connection connection = factory.newConnection(); Channel channel = connection.createChannel();
connection抽象了socket的串連,並且為我們處理了協議版本的協商、許可權認證等等。這裡我們串連的是本地的中介軟體, 也就是localhost,接下來我們建立一個channel,這是大多數API完成任務的所在,也就是說我們的API操作基本都是通過channel來完成的。 1 2 3 4 channel.queueDeclare(QUEUE_NAME, false , false , false , null ); String message = "Hello World!" ; channel.basicPublish( "" , QUEUE_NAME, null , message.getBytes()); System.out.println( " [x] Sent '" + message + "'" );
首先是通過channel來聲明一個queue,並且聲明queue的操作是等冪的,也即是說只有在這個queue不存在的情況下才會新建立一個queue。 這裡發送一個Hello World!的訊息,實際傳遞的訊息內容為位元組數組。 1 2 channel.close(); connection.close();
最後關閉channel和connection的串連,注意關閉的順序,是先關閉channel的串連,再關閉connection的串連。
完整的Send.java代碼 1 2 3 4 5 6 7 8 9 10 11 12 13 14