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

Java Message Service (JMS) 2.0 API のサポートは Premium レベルに限られます。

前提条件

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

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 のサポートを使用すると、これらのさまざまな言語を使って作成されたコンポーネントで高い信頼性と十分な忠実度のメッセージ交換が実現されます。

次のステップ

Azure Service Bus と Java Message Service (JMS) エンティティの詳細については、以下のリンクを参照してください。