Azure Service Bus Premium に接続し、Azure Service Bus JMS ライブラリ を使用するクライアント アプリケーションでは、次のエンティティを使用できます。
待ち行列
JMS のキューは、従来の Service Bus キューと意味的に同等です。
Queue を作成するには、 JMSContext クラスで次のメソッドを使用します。
Queue createQueue(String queueName)
トピック
JMS のトピックは、従来の Service Bus トピックと意味的に同等です。
トピックを作成するには、 JMSContext クラスで次のメソッドを使用します。
Topic createTopic(String topicName)
一時キュー
クライアント アプリケーションで、アプリケーションの有効期間中に存在する一時エンティティが必要な場合は、一時キューを使用できます。 これらのエンティティは、 要求/応答 パターンで使用されます。
一時キューを作成するには、 JMSContext クラスで次のメソッドを使用します。
TemporaryQueue createTemporaryQueue()
一時的なトピック
一時キューと同様に、一時トピックは、アプリケーションの有効期間中存在する一時エンティティを介してパブリッシュ/サブスクライブを有効にするために存在します。
一時的なトピックを作成するには、 JMSContext クラスで次のメソッドを使用します。
TemporaryTopic createTemporaryTopic()
Java メッセージ サービス (JMS) サブスクリプション
これらのサブスクリプションは、 Service Bus トピックのサブスクリプション (つまり、トピック上に存在し、発行/サブスクライブ セマンティクスを有効にする) に似ていますが、Java Message Service 仕様では、特定のサブスクリプションの Shared、 Unshared、**Durable、および 非永続的 属性の概念が導入されています。
注
以下のサブスクリプションは、Azure Service Bus JMS ライブラリを使用して Azure Service Bus に接続するクライアント アプリケーションの Azure Service Bus Premium レベルで利用できます。
Azure portal を使用して作成できるのは永続的なサブスクリプションのみです。
共有永続サブスクリプション
共有永続サブスクリプションは、アプリケーションがサブスクリプションから常にアクティブに使用しているかどうかに関係なく、トピックで発行されたすべてのメッセージをアプリケーションが受信して処理する場合に使用されます。
Service Bus から受信するために認証されたすべてのアプリケーションは、共有永続サブスクリプションから受信できます。
共有永続サブスクリプションを作成するには、 JMSContext クラスで次のメソッドを使用します。
JMSConsumer createSharedDurableConsumer(Topic topic, String name)
JMSConsumer createSharedDurableConsumer(Topic topic, String name, String messageSelector)
共有永続サブスクリプションは、unsubscribe クラスの JMSContext メソッドを使用して削除されない限り、引き続き存在します。
void unsubscribe(String name)
非共有の永続サブスクリプション
共有永続サブスクリプションと同様に、共有されていない永続サブスクリプションは、アプリケーションがサブスクリプションからアクティブに使用しているかどうかに関係なく、トピックで発行されたすべてのメッセージをアプリケーションが受信して処理する場合に使用されます。
ただし、このサブスクリプションは非共有サブスクリプションであるため、サブスクリプションを作成したアプリケーションのみがそのサブスクリプションから受信できます。
非共有の永続サブスクリプションを作成するには、クラスから次のメソッド JMSContext 使用します。
JMSConsumer createDurableConsumer(Topic topic, String name)
JMSConsumer createDurableConsumer(Topic topic, String name, String messageSelector, boolean noLocal)
注
noLocal機能は現在サポートされておらず、無視されています。
非共有の永続サブスクリプションは、unsubscribe クラスの JMSContext メソッドを使用して削除されない限り、引き続き存在します。
void unsubscribe(String name)
共有された非持続的サブスクリプション
共有の無期限サブスクリプションは、複数のクライアント アプリケーションが 1 つのサブスクリプションからメッセージを受信および処理する必要がある場合に、アクティブに使用/受信するまで使用されます。
サブスクリプションは永続的ではないので、保持されません。 アクティブなコンシューマーが存在しない場合、このサブスクリプションではメッセージは受信されません。
共有の使用不可サブスクリプションを作成するには、JmsConsumer クラスの以下のメソッドに示すようにJMSContextを作成します。
JMSConsumer createSharedConsumer(Topic topic, String sharedSubscriptionName)
JMSConsumer createSharedConsumer(Topic topic, String sharedSubscriptionName, String messageSelector)
共有された非有効なサブスクリプションは、アクティブなコンシューマーが受信するまで存在し続けます。
非共有の非永続的なサブスクリプション
クライアント アプリケーションがサブスクリプションからメッセージを受信して処理する必要がある場合、共有されていない非永続型サブスクリプションは、アクティブに消費している間だけ使用されます。 このサブスクリプションに存在できるコンシューマーは 1 つだけです。つまり、サブスクリプションを作成したクライアントです。
サブスクリプションは永続的ではないので、保持されません。 アクティブなコンシューマーが存在しない場合、このサブスクリプションではメッセージは受信されません。
非共有の非保証サブスクリプションを作成するには、JMSConsumer クラスから次のメソッドに示すようにJMSContextを作成します。
JMSConsumer createConsumer(Destination destination)
JMSConsumer createConsumer(Destination destination, String messageSelector)
JMSConsumer createConsumer(Destination destination, String messageSelector, boolean noLocal)
注
noLocal機能は現在サポートされておらず、無視されています。
共有対象外のサブスクリプションは、アクティブなコンシューマーが受信するまで存在し続けます。
メッセージ セレクター
通常の Service Bus サブスクリプションに 対してフィルターとアクション が存在するのと同様に、JMS サブスクリプションには メッセージ セレクター が存在します。
メッセージ・セレクターは、各 JMS サブスクリプションで設定でき、メッセージ・ヘッダー・プロパティーのフィルター条件として存在します。 メッセージ セレクター式に一致するヘッダー プロパティを持つメッセージのみが配信されます。 値が null または空の文字列は、JMS サブスクリプション/コンシューマーのメッセージ セレクターがないことを示します。
Java Message Service (JMS) 2.0 サブスクリプションのその他の概念
クライアントの範囲設定
Java Message Service (JMS) 2.0 API で指定されているサブスクリプションは、(適切なで識別される) clientIdが設定される場合と、スコープされていない場合があります。
サブスクリプションのスコープが設定されると、同じクライアント ID を持つクライアント アプリケーションからの みアクセスできます 。
別のクライアント ID (clientId2 など) を持つアプリケーションから特定のクライアント ID (clientId1 など) にスコープされたサブスクリプションにアクセスしようとすると、他のクライアント ID (clientId2) をスコープとした別のサブスクリプションが作成されます。
注
クライアント ID は null または空にすることができますが、JMS クライアント アプリケーションで設定されたクライアント ID と一致する必要があります。 Azure Service Bus の観点からは、null クライアント ID と空のクライアント ID の動作は同じです。
クライアント ID が null または空に設定されている場合、クライアント ID も null または空に設定されているクライアント アプリケーションのみがアクセスできます。
共有性
共有 サブスクリプションを使用すると、複数のクライアント/コンシューマー (つまり JMSConsumer オブジェクト) からメッセージを受信できます。
注
特定のクライアント ID をスコープとする共有サブスクリプションには、引き続き複数のクライアント/コンシューマー (JMSConsumer オブジェクト) からアクセスできますが、各クライアント アプリケーションには同じクライアント ID が必要です。
非共有 サブスクリプションでは、1 つのクライアント/コンシューマー (つまり JMSConsumer オブジェクト) からのメッセージの受信のみが許可されます。 非共有のサブスクリプションでJMSConsumerが作成されると、既にその上でメッセージをリッスンしているアクティブなJMSConsumerがある場合、JMSExceptionがスローされます。
耐久性
永続 サブスクリプションは保持され、アプリケーション (JMSConsumer) がトピックからのメッセージを使用しているかどうかに関係なく、トピックからのメッセージを収集し続けます。
非永続的 サブスクリプションは永続化されず、アプリケーション (JMSConsumer) がトピックからのメッセージを使用している限り、トピックからメッセージを収集します。
クライアントスコープサブスクリプションの表現
クライアント スコープ (JMS) サブスクリプションが既存の サブスクリプションと共存する必要がある場合、クライアント スコープ (JMS) サブスクリプションの表現方法は次の形式を使用します。
- <SUBSCRIPTION-NAME>$<CLIENT-ID>$D (永続サブスクリプションの場合)
- <SUBSCRIPTION-NAME>$<CLIENT-ID>$ND (非有効なサブスクリプションの場合)
ここで、 $ は区切り記号です。
次のステップ
Service Bus メッセージングの使用方法の詳細と例については、次の高度なトピックを参照してください。