1

日付/時刻をメッセージ プロパティとしてキューにメッセージを入れ、そのプロパティが現在の日付に関する基準を満たしたときにキューからメッセージをプルしたいと考えています。

例として、3:00 にメッセージを消費したいとします。私の考えは、プロパティを 3:00 に設定してから、 のようなメッセージ セレクターを用意することevent_timestamp <= CURRENT_TIMESTAMPです。

JMS API のメッセージ セレクターが SQL に基づいていることを理解しているので、データベースにクエリを実行する方法でそれを使用したいと思いCURRENT_TIMESTAMPますNOW()。メッセージセレクター式の構文に類似したもの、またはこの種の結果を達成する別の方法はありますか?

4

4 に答える 4

3

私の知る限り、JMS 仕様ではセレクターに使用できる関数はありません。メッセージ セレクター リファレンスによると、一部はベンダー固有の実装拡張機能に存在するが、tibco には存在しない可能性があります。

メッセージセレクターは特定の の固定パラメーターであるため、現在の日付 (または何でも) を使用しMessageConsumerて文字列を作成し、このセレクタークエリが変更されるたびに呼び出す必要があります。selectorSession.createConsumerSession.createDurableSubscriberSession.createBrowser

妥当なパフォーマンスを維持するために、すべてのコンシューマーに対して同じ接続とセッションを維持することをお勧めします。

もう 1 つのオプションは、メッセージ ブラウザーを使用してメッセージのプロパティを開いて条件を計算し、一致する場合はそれを効果的に使用することを決定することですが、この考え方は間違いなく通常のポーリングであり、メッセージングの哲学を破ります。

定義されたタイムスタンプの後、将来の処理のためにメッセージを投稿すると思います。メッセージの有効期限のおかげで、要件を実装する別の方法があるかもしれません。一般に、期限切れのメッセージをキュー A から別のキュー B に移動するようにブローカーを構成できるため、ブローカがその役割を果たします。コンシューマーは、有効期限が切れた後にのみキュー B で利用可能なメッセージをリッスンします。

于 2012-05-03T20:53:27.817 に答える
2

サーバーが JMS 2.0 に準拠している場合は、配信遅延機能を使用してくださいJMSProducer.setDeliveryDelay(long deliveryDelay)
メッセージをキューに入れると、目的の時間までの遅延が計算されます。
JMS 2.0 の新機能

于 2017-04-07T01:37:49.597 に答える
0

メッセージのユーザー定義プロパティには、何でも入れることができます。たとえば、ユーザープロパティMyTimeStampとプロパティの値がとして設定されている3.00場合、セレクターをとして使用できるセレクターを使用できますMyTimeStamp='3.00'。メッセージは、キューに到着するとすぐに待機中のコンシューマーに配信されます。これは、システム時刻が午後3時のときにメッセージがコンシューマーに配信されることを意味するものではありません。

于 2012-04-25T09:03:34.440 に答える