アイデアはトピックにメッセージを送信し、pub/subのみ(キューなし)とPERSISTENT配信モードを使用してメッセージをストライプで消費することです。簡単にするために、プロデューサーが次の階層を持つ特定のトピックにメッセージを公開するとします:bus/<componentId/<transactionId>
シンプルさは、10人の消費者があると言うことができますためJavaを使用してSolaceでワイルドカードを使用して耐久性のあるトピックエンドポイントに登録できますか?
消費者は、トピック "ストライプ" を受信したいと彼らはのtransactionIdによって自分たちの中でトラフィックをストライプ化したい:
-
bus/*/1*
- ...
bus/*/9*
私がサブしようとするとこのようなワイルドカードを使用してトピックのエンドポイントにスクライブ、私は次の例外を取得
DurableTopicEndpoint topicEndpoint = JCSMPFactory.onlyInstance().createDurableTopicEndpoint("bus/*/1*");
ConsumerFlowProperties propsFlow = new ConsumerFlowProperties();
propsFlow.setEndpoint(topicEndpoint);
:このarticleのセクション 『トピックエンドポイントへのサブスクリプションの追加』の光で
Exception in thread "main" java.lang.IllegalArgumentException: Topic Endpoint name "bus/*/1*" contains illegal character [*]
at com.solacesystems.common.util.DestinationUtil.isValidEndpointName(DestinationUtil.java:234)
at com.solacesystems.common.util.DestinationUtil.isValidTopicEndpointPhysicalName(DestinationUtil.java:209)
at com.solacesystems.common.util.DestinationUtil.isValidDTEPhysicalName(DestinationUtil.java:213)
at com.solacesystems.jcsmp.impl.SessionModeSupport.createFlow(SessionModeSupport.java:247)
at com.solacesystems.jcsmp.impl.SessionModeSupport.createFlow(SessionModeSupport.java:170)
at com.solacesystems.jcsmp.impl.JCSMPBasicSession.createFlow(JCSMPBasicSession.java:953)
を - それはですすべてSolace Java APIで可能ですか?
これはお役に立ちました、ありがとうございます。それでも、CLIまたはSolAdmin管理から管理者側で最初に耐久性のあるトピックエンドポイントを作成する必要があるように見えます。次に、このトピックエンドポイントを*を使用してトピックストライプにサブスクライブできます。 これは、キューとトピックからキューへのマッピングを使用するのと非常によく似ています。つまり、キューを管理上作成し、*を使用してトピックストライプに登録します。唯一の違いは、キューはおそらく複数のトピックストライプを許可するということです。他の違いはありますか? –
'JCSMPSession.provision()'を使用してプログラムでエンドポイントを作成し、それにサブスクリプションを適用できます。 –
キューはトピックエンドポイントよりもはるかに柔軟性があり、ほとんどのアプリケーションで推奨されるアプローチです。 トピックエンドポイントの使用は、JMSアプリケーションに限定する必要があります。 キューとトピックエンドポイントの両方の機能の完全なリストについては、ドキュメントを参照してください。 https://docs.solace.com/Features/Endpoints.htm –