この記事では、広く使われている Java Message Service (JMS) 2.0 API を使用し、Advanced Message Queueing Protocol (AMQP) 1.0 プロトコルで Azure Service Bus を操作する方法について説明します。
重要な注意事項
いくつかの重要なポイントを次に示します。
- JMS 2.0 API のサポートは、プレミアム レベルでのみ使用でき、azure-servicebus-jms ライブラリを使用する場合に限られます。
- Premium 名前空間に対して azure-servicebus-jms 以外の JMS ライブラリ (たとえば、最新 の qpid-jms-client) を使用すると、 JMS 1.1 の動作が観察され、JMS 2.0 の一部の機能が期待どおりに動作しない可能性があります。 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(アプリケーション・プログラミング・インターフェース) | ステータス |
|---|---|---|
| キュー |
|
サポートあり |
| トピック |
|
サポートあり |
| 一時キュー |
|
サポートあり |
| 一時トピック |
|
サポートあり |
| メッセージ プロデューサー/ JMSProducer |
|
サポートあり |
| キュー ブラウザー |
|
サポートあり |
| メッセージ コンシューマー/ JMSConsumer |
noLocal は現在サポートされていません。 |
サポートあり |
| 共有の永続的サブスクリプション |
|
サポートあり |
| 非共有の永続的サブスクリプション |
noLocal は現在サポートされていません。False に設定する必要があります |
サポートあり |
| 共有の非永続的サブスクリプション |
|
サポートあり |
| 非共有の非永続的サブスクリプション |
noLocal は現在サポートされていません。False に設定する必要があります |
サポートあり |
| メッセージ セレクター | 作成されたコンシューマーによって異なります。 Service Bus セレクターでは、"LIKE" と "BETWEEN" の SQL キーワードはサポートされていません。 | サポートあり |
| 配信の遅延 (スケジュール済みメッセージ) |
|
サポートあり |
| メッセージの作成 |
|
サポートあり |
| エンティティ間トランザクション |
|
サポートあり |
| 分散トランザクション | サポートなし |
Java Message Service (JMS) クライアント ライブラリのダウンロード
Premium レベルで使用可能なすべての機能を利用するには、次のライブラリをプロジェクトのビルド パス (azure-servicebus-jms) に追加します。 このパッケージには、プリフェッチ ポリシー値、再接続ポリシー、Microsoft Entra ID、マネージド ID のサポートなど、必要な既定値がいくつか用意されています。
注
ビルド パスに azure-servicebus-jms を追加するには、Maven や Gradle など、プロジェクトに適した依存関係管理ツールを使用してください。
Java アプリケーションのコーディング
依存関係がインポートされると、Java アプリケーションを JMS プロバイダーに依存しない方法で記述できます。
JMS を使用した Azure Service Bus への接続
JMS クライアントを使用して Azure Service Bus に接続するには、接続文字列が必要です。これは、Azure portal の "共有アクセス ポリシー" の [プライマリ接続文字列] から入手できます。
ServiceBusJmsConnectionFactorySettingsをインスタンス化しますServiceBusJmsConnectionFactorySettings connFactorySettings = new ServiceBusJmsConnectionFactorySettings(); connFactorySettings.setConnectionIdleTimeoutMS(20000);適切な
ServiceBusJmsConnectionFactoryを使用してServiceBusConnectionStringをインスタンス化します。String ServiceBusConnectionString = "<SERVICE_BUS_CONNECTION_STRING_WITH_MANAGE_PERMISSIONS>"; ConnectionFactory factory = new ServiceBusJmsConnectionFactory(ServiceBusConnectionString, connFactorySettings);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 の場合、セッションとは、
MessageProducer、MessageConsumer、Message自体の作成を可能にする、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 のサポートを使用すると、これらのさまざまな言語を使って作成されたコンポーネントで高い信頼性と十分な忠実度のメッセージ交換が実現されます。