JMSでは、QUEUEの場合はメッセージがFIFO形式で格納されますが、Topicの場合、メッセージはどのように格納されるのでしょうか?? FIFOで他の方法でかどうか??
2 に答える
トピックの FIFO も。それはキューとトピックの違いではありません。
Queue と Topic の大きな違いはメッセージング モデルです。ポイント ツー ポイントとパブリッシュ/サブスクライブです。
- キュー (ポイントツーポイント): 1 つのコンシューマーが各メッセージを受け取ると仮定します。現時点でリッスンしているコンシューマーがいない場合は、メッセージが到着するまでメッセージを保存します。コンシューマーが 1 人を超える場合は、コンシューマーを 1 つランダムに選択して各メッセージを取得します。
- トピック (パブリッシュ/サブスクライブ): 現在接続されているすべてのコンシューマーが各メッセージを送信されると仮定します。送信されたメッセージごとに、現在接続しているすべてのコンシューマーがコピーを取得できるように手配します。現在リッスンしているコンシューマーがいない場合は、メッセージをドロップします。
この議論では、永続的なトピック サブスクリプションを無視しています。これは、メッセージの送信時にコンシューマがリッスンしていない場合、そのコンシューマに対してメッセージがドロップされないトピック サブスクライバのひねりです。
JMS では、メッセージの順序付けに関してキューとトピックに違いはありません。ただし、メッセージ配信は常に FIFO ではないことに注意してください。仕様には次のように記載されています。JMS は、セッションによって送信先に送信されたメッセージは、送信された順序で受信する必要があると定義しています ( http://docs.oracle.com/cd/E19957-01/816-5904-10/816-を参照)。 5904-10.pdf - 4.4.10 章) ただし、配信モードや優先度が異なるなど、いくつかの制限があります。
多くの環境では、複数のサーバーまたはプロセスで並列処理が行われるため、1 つのセッションによって送信された依存メッセージは見つかりません。そのため、メッセージの順序に依存することはほとんどお勧めできません。