Java 訊息服務 (JMS) 2.0 實體

連線至 Azure 服務匯流排進階並使用 Azure 服務匯流排 JMS 程式庫的用戶端應用程式可以使用下列實體。

佇列

JMS 中的佇列在語意上與傳統服務匯流排佇列相當。

若要建立佇列,請在 JMSContext 類別中使用下列方法 -

Queue createQueue(String queueName)

主題

JMS 中的主題在語意上與傳統服務匯流排主題相當。

若要建立主題,請在 JMSContext 類別中使用下列方法 -

Topic createTopic(String topicName)

暫時性佇列

如果用戶端應用程式需要在應用程式存留期內存在的暫存實體,則可以使用暫存佇列。 這些實體用於要求-回覆模式中。

若要建立暫存佇列,請在 JMSContext 類別中使用下列方法 -

TemporaryQueue createTemporaryQueue()

暫時性主題

就像暫存佇列一樣,暫時性主題的存在是為了透過應用程式存留期內存在的暫存實體啟用發佈/訂閱。

若要建立暫時性主題,請在 JMSContext 類別中使用下列方法 -

TemporaryTopic createTemporaryTopic()

Java 訊息服務 (JMS) 訂用帳戶

雖然這些在語意上與訂用帳戶類似 (也就是說,存在於主題上並啟用發佈/訂閱語意),但 Java Message Service 規格為給定的訂用帳戶引進了共用非共用、**永久性和非永久性屬性的概念。

注意

對於使用 Azure 服務匯流排 JMS 程式庫連線至 Azure 服務匯流排的用戶端應用程式,下列訂用帳戶適用於其 Azure 服務匯流排進階層。

只能使用 Azure 入口網站建立永久性訂用帳戶。

共用永久性訂閱

當主題上發佈的所有訊息都由應用程式接收和處理時,就會使用共用永久性訂用帳戶,不論應用程式是否始終都從訂用帳戶主動取用。

經過驗證以從服務匯流排接收的任何應用程式,都可以從共用永久性訂用帳戶接收。

若要建立共用永久性訂用帳戶,請在 JMSContext 類別上使用下列方法 -

JMSConsumer createSharedDurableConsumer(Topic topic, String name)

JMSConsumer createSharedDurableConsumer(Topic topic, String name, String messageSelector)

除非在 JMSContext 類別上使用 unsubscribe 方法加以刪除,否則共用永久性訂用帳戶會繼續存在。

void unsubscribe(String name)

非共用永久性訂閱

如同共用永久性訂用帳戶,當主題上發佈的所有訊息都由應用程式接收和處理時,就會使用非共用永久性訂用帳戶,不論應用程式是否始終都從訂用帳戶主動取用。

不過,由於這是非共用訂用帳戶,因此只有已建立訂用帳戶的應用程式才能從中接收。

若要建立非共用永久性訂用帳戶,請從 JMSContext 類別使用下列方法 -

JMSConsumer createDurableConsumer(Topic topic, String name)

JMSConsumer createDurableConsumer(Topic topic, String name, String messageSelector, boolean noLocal)

注意

目前不支援 noLocal 功能並會將其忽略。

除非在 JMSContext 類別上使用 unsubscribe 方法加以刪除,否則非共用永久性訂用帳戶會繼續存在。

void unsubscribe(String name)

共用非永久性訂閱

當多個用戶端應用程式需要從單一訂用帳戶接收和處理訊息時,才會使用共用非永久性訂用帳戶,直到其主動從中取用/接收為止。

因為訂用帳戶不是永久性的,所以不會加以保存。 當此訂用帳戶上沒有任何作用中的取用者時,其不會接收訊息。

若要建立共用非永久性訂用帳戶,請建立 JmsConsumer,如下列來自 JMSContext 類別的方法所示 -

JMSConsumer createSharedConsumer(Topic topic, String sharedSubscriptionName)

JMSConsumer createSharedConsumer(Topic topic, String sharedSubscriptionName, String messageSelector)

共用非永久性訂用帳戶會持續存在,直到有作用中的取用者從中接收為止。

非共用非永久性訂閱

當用戶端應用程式需要從訂用帳戶接收和處理訊息時,才會使用非共用非永久性訂用帳戶,直到其主動從中取用為止。 此訂用帳戶上只能存在一個取用者,也就是已建立訂用帳戶的用戶端。

因為訂用帳戶不是永久性的,所以不會加以保存。 當此訂用帳戶上沒有任何作用中的取用者時,其不會接收訊息。

若要建立非共用非永久性訂用帳戶,請建立 JMSConsumer,如下列來自 JMSContext 類別的方法所示 -

JMSConsumer createConsumer(Destination destination)

JMSConsumer createConsumer(Destination destination, String messageSelector)

JMSConsumer createConsumer(Destination destination, String messageSelector, boolean noLocal)

注意

目前不支援 noLocal 功能並會將其忽略。

非共用非永久性訂用帳戶會持續存在,直到有作用中的取用者從中接收為止。

訊息選取器

就像篩選條件和動作針對一般服務匯流排訂用帳戶存在,訊息選取器則針對 JMS 訂用帳戶存在。

訊息選取器可在每個 JMS 訂用帳戶上設定,並以篩選條件的形式存在於訊息標頭屬性上。 只會傳遞標頭屬性符合訊息選取器運算式的訊息。 Null 值或空字串表示 JMS 訂用帳戶/取用者沒有訊息選取器。

Java Message Service (JMS) 2.0 訂用帳戶的其他概念

用戶端範圍

Java Message Service (JMS) 2.0 API 中指定的訂用帳戶,其範圍不一定會限定為特定的用戶端應用程式 (以適當的 clientId 識別)。

一旦限定了訂用帳戶範圍,只能從具有相同用戶端識別碼的用戶端應用程式 存取該訂用帳戶。

只要嘗試從具有另一個用戶端識別碼 (例如 clientId2) 的應用程式存取範圍限定為特定用戶端識別碼 (例如 clientId1) 的訂用帳戶,就會導致建立另一個範圍限定為另一個用戶端識別碼 (clientId2) 的訂用帳戶。

注意

用戶端識別碼可以是 Null 或空白,但必須符合 JMS 用戶端應用程式上設定的用戶端識別碼。 從 Azure 服務匯流排的觀點來看,Null 用戶端識別碼和空白用戶端識別碼的行為相同。

如果用戶端識別碼設定為 Null 或空白,則只能存取用戶端識別碼也設定為 Null 或空白的用戶端應用程式。

可共用性

共用訂用帳戶允許多個用戶端/取用者 (也就是 JMSConsumer 物件) 從中接收訊息。

注意

範圍限定為特定用戶端識別碼的共用訂用帳戶仍可由多個用戶端/取用者 (例如 JMSConsumer 物件) 存取,但每個用戶端應用程式都必須具有相同的用戶端識別碼。

非共用訂用帳戶只允許單一用戶端/取用者 (也就是 JMSConsumer 物件) 從中接收訊息。 如果在非共用訂用帳戶上建立了 JMSConsumer,同時已有作用中 JMSConsumer 接聽其上的訊息,則會擲回 JMSException

持久性

永久性訂用帳戶會加以保存,並繼續從主題收集訊息,而不論應用程式 (JMSConsumer) 是否從中取用訊息。

非永久性訂用帳戶不會加以保存,而且只要應用程式 (JMSConsumer) 從主題中取用訊息,就會從該主題收集訊息。

用戶端範圍限定訂用帳戶的表示法

假設用戶端範圍限定 (JMS) 訂用帳戶必須與現有的訂用帳戶共同存在,則表示用戶端範圍限定 (JMS) 訂用帳戶的方式會遵循下列格式。

  • <SUBSCRIPTION-NAME>$<CLIENT-ID>$D (適用於永久性訂用帳戶)
  • <SUBSCRIPTION-NAME>$<CLIENT-ID>$ND (適用於非永久性訂用帳戶)

這裡的 $ 是分隔符號。

下一步

如需使用服務匯流排傳訊的詳細資訊和範例,請參閱下列進階主題: