RabbitMQ(教程:http://codingdict.com/article/22507)是一個訊息代理。它的核心原理非常簡單:接收和傳送訊息。你可以把它想像成一個郵局:你把信件放入郵箱,郵遞員就會把信件投遞到你的收件人處。在這個比喻中,RabbitMQ就扮演著郵箱、郵局以及郵遞員的角色。
RabbitMQ和郵局的主要區別是,它不是用來處理紙張的,它是用來接收、儲存和傳送訊息(message)這種二進位制資料的。
一般提到RabbitMQ和訊息,都會用到一些專有名詞。
生產(Producing)意思就是傳送。傳送訊息的程式就是一個生產者(producer)。我們一般用"P"來表示:
佇列(queue)就是郵箱的名稱。訊息透過你的應用程式和RabbitMQ進行傳輸,它們能夠只儲存在一個佇列(queue)中。 佇列(queue)沒有任何限制,你要儲存多少訊息都可以——基本上是一個無限的緩衝。多個生產者(producers)能夠把訊息傳送給同一個佇列,同樣,多個消費者(consumers)也能夠從同一個佇列(queue)中獲取資料。佇列可以繪製成這樣(圖上是佇列的名稱):
消費(Consuming)和獲取訊息是一樣的意思。一個消費者(consumer)就是一個等待獲取訊息的程式。我們把它繪製為"C":
需要指出的是生產者、消費者、代理需不要待在同一個裝置上;事實上大多數應用也確實不在會將他們放在一臺機器上。
Hello World!
(使用the Java Client)
在教程的這部分,我們將要用Java寫兩個類;一個生產者(producer),它只發送一條訊息,和一個消費者,它接受訊息然後列印訊息出來.我們將掩蓋一些Java API中的細節,專注於讓這個簡單的Hello World程式跑起來.
我們的大致的設計是這樣的:
生產者(producer)把訊息傳送到一個名為“hello”的佇列中。消費者(consumer)從這個佇列中獲取訊息。
The Java client library
RabbitMQ可以有多種協議.這個教程使用AMQP 0-9-1協議,這個協議是一個開源的,多用途的訊息協議.我們將使用RabbitMQ給出的java客戶端來體驗RebbitMQ.
下載rabbitmq的java客戶端庫,解壓然後獲取我們要用的jar包
安裝過程依賴於pip和git-core兩個包,你需要先安裝它們。 (RabbitMQ的java客戶端在maven的中央倉庫也有,它的groupId是com.rabbitmq,artifactId是amqp-client)
現在我們有了rabbitmq的Java客戶端庫和它的依賴,我們可以開始敲程式碼了.
傳送訊息
sender將會連線RabbitMQ,傳送一個訊息,然後退出
在Send.java裡面,我們需要匯入一些類;
建立這個類,以及給queue命名.
然後我們建立連線:
這個連線封裝了一個socket,同時處理好了訊息協議的版本和認證.這裡我們連線上了在本地(localhost)的一箇中間人(broker),如果你想要連線別的主機上的中間人,只需要修改一下主機名字或者IP地址
下面,我們建立一個隧道(channel),這個隧道物件裡面有我們需要的API.
要傳送訊息,我們必須先宣告一個佇列.
宣告一個佇列是冪等操作 - 它將只在它不存在的時候被建立.訊息的內容是一個位元組陣列
RabbitMQ(教程:http://codingdict.com/article/22507)是一個訊息代理。它的核心原理非常簡單:接收和傳送訊息。你可以把它想像成一個郵局:你把信件放入郵箱,郵遞員就會把信件投遞到你的收件人處。在這個比喻中,RabbitMQ就扮演著郵箱、郵局以及郵遞員的角色。
RabbitMQ和郵局的主要區別是,它不是用來處理紙張的,它是用來接收、儲存和傳送訊息(message)這種二進位制資料的。
一般提到RabbitMQ和訊息,都會用到一些專有名詞。
生產(Producing)意思就是傳送。傳送訊息的程式就是一個生產者(producer)。我們一般用"P"來表示:
佇列(queue)就是郵箱的名稱。訊息透過你的應用程式和RabbitMQ進行傳輸,它們能夠只儲存在一個佇列(queue)中。 佇列(queue)沒有任何限制,你要儲存多少訊息都可以——基本上是一個無限的緩衝。多個生產者(producers)能夠把訊息傳送給同一個佇列,同樣,多個消費者(consumers)也能夠從同一個佇列(queue)中獲取資料。佇列可以繪製成這樣(圖上是佇列的名稱):
消費(Consuming)和獲取訊息是一樣的意思。一個消費者(consumer)就是一個等待獲取訊息的程式。我們把它繪製為"C":
需要指出的是生產者、消費者、代理需不要待在同一個裝置上;事實上大多數應用也確實不在會將他們放在一臺機器上。
Hello World!
(使用the Java Client)
在教程的這部分,我們將要用Java寫兩個類;一個生產者(producer),它只發送一條訊息,和一個消費者,它接受訊息然後列印訊息出來.我們將掩蓋一些Java API中的細節,專注於讓這個簡單的Hello World程式跑起來.
我們的大致的設計是這樣的:
生產者(producer)把訊息傳送到一個名為“hello”的佇列中。消費者(consumer)從這個佇列中獲取訊息。
The Java client library
RabbitMQ可以有多種協議.這個教程使用AMQP 0-9-1協議,這個協議是一個開源的,多用途的訊息協議.我們將使用RabbitMQ給出的java客戶端來體驗RebbitMQ.
下載rabbitmq的java客戶端庫,解壓然後獲取我們要用的jar包
安裝過程依賴於pip和git-core兩個包,你需要先安裝它們。 (RabbitMQ的java客戶端在maven的中央倉庫也有,它的groupId是com.rabbitmq,artifactId是amqp-client)
現在我們有了rabbitmq的Java客戶端庫和它的依賴,我們可以開始敲程式碼了.
傳送訊息
sender將會連線RabbitMQ,傳送一個訊息,然後退出
在Send.java裡面,我們需要匯入一些類;
import com.rabbitmq.client.ConnectionFactory;import com.rabbitmq.client.Connection;import com.rabbitmq.client.Channel;建立這個類,以及給queue命名.
public class Send { private final static String QUEUE_NAME = "hello"; public static void main(String[] argv){ throws java.io.IOException { }}然後我們建立連線:
ConnectionFactory factory = new ConnectionFactory();factory.setHost("localhost");Connection connection = factory.newConnection();Channel channel = connection.createChannel();這個連線封裝了一個socket,同時處理好了訊息協議的版本和認證.這裡我們連線上了在本地(localhost)的一箇中間人(broker),如果你想要連線別的主機上的中間人,只需要修改一下主機名字或者IP地址
下面,我們建立一個隧道(channel),這個隧道物件裡面有我們需要的API.
要傳送訊息,我們必須先宣告一個佇列.
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+""");宣告一個佇列是冪等操作 - 它將只在它不存在的時候被建立.訊息的內容是一個位元組陣列