客戶端API嚴格按照AMQP 0-9-1協議規範進行建模,並提供了易於使用的附加抽象。
RabbitMQ Java客戶端使用com.rabbitmq.client做爲其頂層包。關鍵的類和接口是:java
協議操做可經過Channel接口得到。Connection用於打開通道,註冊鏈接生命週期事件處理程序,並關閉再也不須要的鏈接。 鏈接是經過ConnectionFactory實例化的,這就是你如何配置各類鏈接設置,如虛擬主機或用戶名。api
import com.rabbitmq.client.Connection; import com.rabbitmq.client.Channel;
如下代碼使用給定的參數(主機名,端口號等)鏈接到AMQP代理:服務器
ConnectionFactory factory = new ConnectionFactory(); factory.setUsername(userName); factory.setPassword(password); factory.setVirtualHost(virtualHost); factory.setHost(hostName); factory.setPort(portNumber); Connection conn = factory.newConnection();
全部這些參數都對本地運行的RabbitMQ服務器具備合理的默認值。函數
或者,可使用URI:代理
ConnectionFactory factory = new ConnectionFactory(); factory.setUri("amqp://userName:password@hostName:portNumber/virtualHost"); Connection conn = factory.newConnection();
全部這些參數都對本地運行的RabbitMQ服務器有合理的默認值。code
而後接口能夠用於打開一個通道:對象
Channel channel = conn.createChannel();
如今可使用該通道發送和接收消息,如後面的部分所述。接口
要斷開鏈接,只需關閉通道和鏈接:生命週期
channel.close(); conn.close();
客戶端應用程序與AMQP的高級構建塊交換和排隊。這些必須被「聲明」纔可使用。聲明任何一種類型的對象只是確保其中一個名稱存在,若是有必要的話建立它。rabbitmq
繼續前面的例子,下面的代碼聲明一個Exchange和一個Queue,而後將它們綁定在一塊兒。
channel.exchangeDeclare(exchangeName, "direct", true); String queueName = channel.queueDeclare().getQueue(); channel.queueBind(queueName, exchangeName, routingKey);
這將主動聲明如下對象,這兩個對象均可以使用附加參數進行定製。這裏他們都沒有任何特別的論點。
上面的函數調用而後用給定的路由密鑰將隊列綁定到交換機上。
請注意,這將是一個典型的方式來聲明一個隊列,當只有一個客戶端想要使用它:它不須要一個衆所周知的名稱,沒有其餘客戶端可使用它(獨佔),將自動清理(自動刪除)。若是有幾個客戶想共享一個知名名字的隊列,這個代碼將是合適的:
channel.exchangeDeclare(exchangeName, "direct", true); channel.queueDeclare(queueName, true, false, false, null); channel.queueBind(queueName, exchangeName, routingKey);
這將主動宣佈:
請注意,全部這些Channel API方法都被重載。這些便捷的exchangeDeclare,queueDeclare和queueBind 使用合理的默認值。還有更多的參數更多的形式,讓你根據須要重寫這些默認值,在須要的地方給予徹底控制。
這個「短形式,長形式」模式在整個客戶端API使用。