次の方法で共有


Azure Service Bus Premium で Java Message Service 2.0 API を使用する

この記事では、広く使われている Java Message Service (JMS) 2.0 API を使用し、Advanced Message Queueing Protocol (AMQP) 1.0 プロトコルで Azure Service Bus を操作する方法について説明します。

Note

JMS 2.0 API のサポートは、プレミアム レベルでのみ使用でき、azure-servicebus-jms ライブラリを使用する場合に限られます。 プレミアム名前空間に対して azure-servicebus-jms 以外の JMS ライブラリ (たとえば、最新の qpid-jms-client) を使用する場合は、JMS 1.1 の動作が確認できます。 azure-servicebus-jms ライブラリは、qpid-jms-client に依存しているため、いかなる種類のベンダー ロックも発生しません。 qpid-jms-client で動作するすべての API は、azure-servicebus-jms ライブラリでも同様に動作します。

azure-servicebus-jms は、オープンソース ライブラリでもあります。 Azure-servicebus-jms ライブラリは主に、Service Bus サービスがプレミアム名前空間に対して作業する際に、 JMS 1.1 の動作 (下位互換性) を必要とするお客様と、JMS 2.0 の動作を必要とするお客様を区別できるように作成されました。 azure-servicebus-jms ライブラリには、プリフェッチ ポリシー値、再接続ポリシー、Microsoft Entra ID、マネージド ID のサポート、エンティティのアイドル時の自動削除のサポートなど、必要な既定値もいくつか用意されています。

azure-servicebus-jms パッケージへの次のパスは、Jakarta Messaging 仕様 (Jakarta.* API) に基づくライブラリの最新バージョンです: Maven Central: com.azure:azure-servicebus-jms。 また、azure-servicebus-jms への次のパスは、Jakarta Messaging 仕様 (javax.* API) 以前のライブラリの最新バージョンです: Maven Central: com.microsoft.azure:azure-servicebus-jms

前提条件

Service Bus の概要

このガイドでは、Service Bus 名前空間が既にあることを前提とします。 まだない場合は、Azure portal を使用して名前空間とキューを作成します。 Service Bus 名前空間とキューの作成方法の詳細については、Azure portal を使用して Service Bus キューを作成する方法に関するページを参照してください。

Java 開発環境を設定する

Java アプリケーションを開発するには、次に示す適切な開発環境を設定する必要があります。

  • JDK (Java Development Kit) または JRE (Java Runtime Environment) のいずれかがインストールされている。
  • JDK または JRE が、ビルド パスと適切なシステム変数に追加されている。
  • JDK または JRE を利用するために、Java IDE がインストールされている。 たとえば、Eclipse や IntelliJ。

Java on Azure 用の開発環境を準備する方法について詳しくは、こちらのガイドを参照してください。

どのような JMS 機能がサポートされていますか?

次の表は、現在 Azure Service Bus でサポートされている Java Message Service (JMS) 機能の一覧を示しています。 また、サポートされていない機能も示しています。

機能 API Status
キュー
  • 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 Message Service (JMS) クライアント ライブラリのダウンロード

Premium レベルで使用可能なすべての機能を利用するには、次のライブラリをプロジェクトのビルド パス (azure-servicebus-jms) に追加します。 このパッケージには、プリフェッチ ポリシー値、再接続ポリシー、Microsoft Entra ID、マネージド ID のサポートなど、必要な既定値がいくつか用意されています。

Note

ビルド パスに azure-servicebus-jms を追加するには、MavenGradle など、プロジェクトに適した依存関係管理ツールを使用してください。

Java アプリケーションのコーディング

依存関係がインポートされると、Java アプリケーションを JMS プロバイダーに依存しない方法で記述できます。

JMS を使用した Azure Service Bus への接続

JMS クライアントを使用して Azure Service Bus に接続するには、接続文字列が必要です。これは、Azure portal の "共有アクセス ポリシー" の [プライマリ接続文字列] から入手できます。

  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 の "セッション" と Service Bus の "セッション" は相互にまったく無関係です。

    JMS 1.1 の場合、セッションとは、MessageProducerMessageConsumerMessage自体の作成を可能にする、API の重要な構成要素のことです。 詳細については、JMS API プログラミング モデルを確認してください

    Service Bus の場合、セッションとは、キューおよびサブスクリプションでの FIFO 処理を可能にする、サービスおよびクライアント側の構成要素のことです。

JMS アプリケーションの記述

Session または JMSContext がインスタンス化されると、アプリケーションで使い慣れた JMS API を使用して管理操作とデータ操作の両方を実行できます。 サポートされる API については、サポートされる JMS 機能の一覧を参照してください。 次に、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();

まとめ

このガイドでは、AMQP 1.0 経由で Java Message Service (JMS) を使用する Java クライアント アプリケーションと Azure Service Bus がどのように対話するかについて説明しました。

Service Bus AMQP 1.0 のサポートは、.NET、C、Python、PHP など、その他の言語からも使用できます。 Service Bus で AMQP 1.0 のサポートを使用すると、これらのさまざまな言語を使って作成されたコンポーネントで高い信頼性と十分な忠実度のメッセージ交換が実現されます。