RabbitMQ-Java客戶端API指南-上
客戶端API嚴格按照AMQP 0-9-1協議規范進行建模,並提供了易於使用的附加抽象。
RabbitMQ Java客戶端使用com.rabbitmq.client作為其頂層包。關鍵的類和接口是:
- Channel
- Connection
- ConnectionFactory
- Consumer
協議操作可通過Channel接口獲得。Connection用於打開通道,注冊連接生命周期事件處理程序,並關閉不再需要的連接。 連接是通過ConnectionFactory實例化的,這就是你如何配置各種連接設置,如虛擬主機或用戶名。
Connections和Channels
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.Channel;
連接到Broker
以下代碼使用給定的參數(主機名,端口號等)連接到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服務器有合理的默認值。
然后接口可以用於打開一個通道:
Channel channel = conn.createChannel();
現在可以使用該通道發送和接收消息,如后面的部分所述。
要斷開連接,只需關閉通道和連接:
channel.close();
conn.close();
使用Exchanges和Queues
客戶端應用程序與AMQP的高級構建塊交換和排隊。這些必須被“聲明”才可以使用。聲明任何一種類型的對象只是確保其中一個名稱存在,如果有必要的話創建它。
繼續前面的例子,下面的代碼聲明一個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使用。