Stomp 支援
ActiveMQ-CPP Stomp 支援
Stomp 是一個簡單的文字型協定,由 ActiveMQ Broker 支援,允許來自各種用戶端(例如 C++、Java、.NET、Ruby、Python 等)的通訊。如果您想了解更多關於 stomp 協定的資訊,請查看 https://stomp.github.io/。
ActiveMQ-CPP 實作的 CMS API 與 stomp 協定有一些特性,因為它是一個簡單的協定,不具備例如 OpenWire 的完整功能。本頁的目的在於記錄這些特性,以便使用者了解他們偶爾可能會看到的任何奇怪行為。
Stomp CMS 中的訊息屬性
由於 Stomp 嚴格基於文字,因此它不支援指定訊息屬性(在 stomp 術語中稱為「header」)類型的方式。這表示以整數形式傳送的屬性,Stomp CMS 用戶端可能會將其讀取為字串、整數、短整數、長整數等任何形式。
例如,當 Java 用戶端向 Broker 發送具有整數屬性(「myval」=1)的訊息時,Broker 會將訊息從 openwire 轉換為 stomp,並在此過程中將屬性「myval」轉換為字串「1」並將訊息發送給用戶端。用戶端接收到該字串,但允許使用者以任何能與 std::istringstream » 運算子成功運作的方式讀取該值。
寫入外發訊息的值也一樣。您可以呼叫任何方法(例如 setIntProperty)。然而,在網路上傳輸的結果值仍然是字串。
臨時主題和佇列
Stomp 協定不支援臨時主題或佇列的概念。如果您呼叫 cms::Session 的 createTemporaryTopic 或 createTemporaryQueue 方法,則會擲回 NotSupportedException 類型的例外狀況。若要實作請求/回應類型的語意,您需要使用標準的主題和佇列。
關於 Stomp 選擇器的使用注意事項
一般而言,Stomp 每個連線只允許一個會話。在 ActiveMQ-CPP 中,我們建立了一種虛擬會話,允許每個連線建立多個會話。需要注意的是,我們建立的主 Stomp 會話仍然只能有一個選擇器,因此無論使用選擇器建立的第一個會話為何,都將是唯一實際產生影響的選擇器,因為即使您在建立該會話時傳入選擇器,任何新建立的會話都不會套用選擇器。
Stomp 和容錯移轉
目前,Stomp 協定處於 V1.0 版,並且未在協定中提供必要的功能,以允許對基於 Stomp 的傳輸使用容錯移轉。Stomp v1.1 的草案版本正在進行中,其中包括 Broker 和用戶端之間的保持連線監控的規定,這將允許偵測到連線中斷。即使有這種支援,對於 Stomp 用戶端的容錯移轉所能實現的功能也會有所限制,交易將無法還原,並且訊息復原也將不可能。Stomp 容錯移轉的行為幾乎需要像與 Broker 建立新的 Stomp 連線一樣,並自動重新訂閱現有的消費者,所有目前預先提取的訊息都將從現有的消費者中清除。在 Stomp v1.1 規範獲得批准且 ActiveMQ-CPP 用戶端程式碼更新以支援此功能之前,不建議您將 Stomp 傳輸和容錯移轉傳輸結合使用。