RabbitMQ-Java客戶端API指南-上


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使用。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM