搭配使用 JAVA 訊息服務 2.0 API 與 Azure 服務匯流排進階

本文說明如何使用熱門 JAVA 訊息服務 (JMS) 2.0 API,透過進階訊息佇列通訊協定 (AMQP 1.0 通訊協定) 與 Azure 服務匯流排進行互動。

注意

進階層提供對 JAVA 訊息服務 (JMS) 2.0 API 的支援。>

必要條件

開始使用服務匯流排

本指南假設您已經有服務匯流排命名空間。 如果沒有,請使用 Azure 入口網站建立命名空間和佇列。 如需有關如何建立服務匯流排命名空間和佇列的相關詳細資訊,請參閱透過 Azure 入口網站開始使用服務匯流排佇列

設定 JAVA 開發環境

若要開發 JAVA 應用程式,您需要設定適當的開發環境 -

  • 已安裝 JDK (JAVA 開發套件) 或 JRE (JAVA Runtime Environment) 兩者之一。
  • JDK 或 JRE 會新增至組建路徑和適當的系統變數。
  • 已安裝 JAVA IDE 以利用 JDK 或 JRE。 例如 Eclipse 或 IntelliJ。

若要深入了解如何在 Azure 上準備適用於 JAVA 的開發人員環境,請利用本指南

支援哪些 JMS 功能?

下表列出 Azure 服務匯流排目前支援的 Java 訊息服務 (JMS) 功能。 此外也會顯示不支援的功能。

功能 API 狀態
佇列
  • JMSContext.createQueue( String queueName)
支援
主題
  • JMSContext.createTopic( String topicName)
支援
暫時性佇列
  • JMSContext.createTemporaryQueue()
支援
暫時性主題
  • JMSContext.createTemporaryTopic()
支援
訊息生產者 /
JMSProducer
  • JMSContext.createProducer()
支援
佇列瀏覽器
  • JMSContext.createBrowser(Queue queue)
  • JMSContext.createBrowser(Queue queue, String messageSelector)
支援
訊息取用者/
JMSConsumer
  • JMSContext.createConsumer( Destination destination)
  • JMSContext.createConsumer( Destination destination, String messageSelector)
  • JMSContext.createConsumer( Destination destination, String messageSelector, boolean noLocal)

目前不支援 noLocal
支援
共用永久性訂閱
  • JMSContext.createSharedDurableConsumer(Topic topic, String name)
  • JMSContext.createSharedDurableConsumer(Topic topic, String name, String messageSelector)
支援
非共用永久性訂閱
  • JMSContext.createDurableConsumer(Topic topic, String name)
  • createDurableConsumer(Topic topic, String name, String messageSelector, boolean noLocal)

noLocal 目前不受支援,應設定為 false
支援
共用非永久性訂閱
  • JMSContext.createSharedConsumer(Topic topic, String sharedSubscriptionName)
  • JMSContext.createSharedConsumer(Topic topic, String sharedSubscriptionName, String messageSelector)
支援
非共用非永久性訂閱
  • JMSContext.createConsumer(Destination destination)
  • JMSContext.createConsumer( Destination destination, String messageSelector)
  • JMSContext.createConsumer( Destination destination, String messageSelector, boolean noLocal)

noLocal 目前不受支援,應設定為 false
支援
訊息選取器 取決於建立的取用者 支援
傳遞延遲 (排定的訊息)
  • JMSProducer.setDeliveryDelay( long deliveryDelay)
支援
已建立訊息
  • JMSContext.createMessage()
  • JMSContext.createBytesMessage()
  • JMSContext.createMapMessage()
  • JMSContext.createObjectMessage( Serializable object)
  • JMSContext.createStreamMessage()
  • JMSContext.createTextMessage()
  • JMSContext.createTextMessage( String text)
支援
跨實體交易
  • Connection.createSession(true, Session.SESSION_TRANSACTED)
支援
分散式交易 不支援

下載 JAVA 訊息服務 (JMS) 用戶端程式庫

若要利用進階層中可用的所有功能,請將下列程式庫新增至專案的建置路徑。

Azure-servicebus-jms

注意

若要將 Azure-servicebus-jms 新增至建置路徑,請使用專案的慣用相依性管理工具,例如 MavenGradle

編寫 Java 應用程式

一旦匯入相依性,就可以透過與 JMS 提供者無關的方式撰寫 JAVA 應用程式。

使用 JMS 連線至 Azure 服務匯流排

若要使用 JMS 用戶端與 Azure 服務匯流排連線,您需要 Azure 入口網站「共用存取原則」中「主連線字串」下提供的連接字串

  1. 具現化 ServiceBusJmsConnectionFactorySettings

    ServiceBusJmsConnectionFactorySettings connFactorySettings = new ServiceBusJmsConnectionFactorySettings();
    connFactorySettings.setConnectionIdleTimeoutMS(20000);
    
  2. 使用適當的 ServiceBusConnectionString 具現化 ServiceBusJmsConnectionFactory

    String ServiceBusConnectionString = "<SERVICE_BUS_CONNECTION_STRING_WITH_MANAGE_PERMISSIONS>";
    ConnectionFactory factory = new ServiceBusJmsConnectionFactory(ServiceBusConnectionString, connFactorySettings);
    
  3. 使用 ConnectionFactory 建立 Connection,然後建立 Session

    Connection connection = factory.createConnection();
    Session session = connection.createSession();
    

    JMSContext (適用於 JMS 2.0 用戶端)

    JMSContext jmsContext = factory.createContext();
    

    重要

    儘管名稱相似,JMS「工作階段」和服務匯流排「工作階段」彼此完全獨立。

    在 JMS 1.1 中,「工作階段」是 API 的基本建置區塊,它允許建立 MessageProducerMessageConsumerMessage 本身。 如需詳細資訊,請檢閱 JMS API 程式設計模型

    在服務匯流排中,工作階段是服務和用戶端建構,用於在佇列和訂用帳戶上啟用 FIFO 處理。

撰寫 JMS 應用程式

一旦具現化 SessionJMSContext,您的應用程式就可以使用熟悉的 JMS API 來執行管理和資料作業。 請參閱支援的 JMS 功能清單,以查看哪些 API 受到支援。 以下是一些開始使用 JMS 的範例程式碼片段 -

傳送訊息至佇列和主題

// Create the queue and topic
Queue queue = jmsContext.createQueue("basicQueue");
Topic topic = jmsContext.createTopic("basicTopic");
// Create the message
Message msg = jmsContext.createMessage();

// Create the JMS message producer
JMSProducer producer = jmsContext.createProducer();

// send the message to the queue
producer.send(queue, msg);
// send the message to the topic
producer.send(topic, msg);

從佇列接收訊息

// Create the queue
Queue queue = jmsContext.createQueue("basicQueue");

// Create the message consumer
JMSConsumer consumer = jmsContext.createConsumer(queue);

// Receive the message
Message msg = (Message) consumer.receive();

從主題的共用長期訂用帳戶接收訊息

// Create the topic
Topic topic = jmsContext.createTopic("basicTopic");

// Create a shared durable subscriber on the topic
JMSConsumer sharedDurableConsumer = jmsContext.createSharedDurableConsumer(topic, "sharedDurableConsumer");

// Receive the message
Message msg = (Message) sharedDurableConsumer.receive();

摘要

此指南示範了使用 JAVA 訊息服務 (JMS) 的 JAVA 用戶端應用程式,如何透過 AMQP 1.0 與 Azure 服務匯流排互動。

您也可以使用包括 .NET、C、Python 和 PHP 在內的其他語言所撰寫的 Service Bus AMQP 1.0。 使用這些不同的語言撰寫的元件可使用服務匯流排中的 AMQP 1.0 支援確實完整交換訊息。

下一步

如需有關 Azure 服務匯流排和 JAVA 訊息服務 (JMS) 實體的更多詳細資料,請參閱下列連結 -