私は現在読んでいてJMS
、いくつかの記事の後で、私の頭の中に非永続的なメッセージがある永続的なサブスクリプションについて少し混乱があります。始めましょう:http://www2.sys-con.com/itsg/virtualcd/java/archives/0604/chappell/index.html-それは言う:
非永続メッセージが切断された永続サブスクライバーを対象としている場合、メッセージサーバーはメッセージを永続メッセージであるかのようにディスクに保存します。この場合、永続メッセージと非永続メッセージの違いは微妙ですが、非常に重要です。非永続メッセージの場合、JMSプロバイダーは、切断された永続サブスクライバーに代わってメッセージをディスクに書き出す前に失敗する可能性があります。メッセージが失われる可能性があります
そして別の情報源:http://openmessaging.blogspot.com/2009/04/durable-messages-and-persistent.htmlはまったく異なることを言っています:
このトピックに永続的なサブスクリプションがある場合、メッセージのコピーがアクティブな永続的なサブスクライバーに送信されます。非アクティブな永続サブスクリプションの場合、メッセージのコピーがメモリに保存され、次にアクティブになったときに送信されます。
この保存されたメッセージは、ブローカーを再起動すると失われます。非永続メッセージはディスクに保存されないため、ブローカーの再起動は、メッセージをまだ受信していない非アクティブな永続サブスクリプションがメッセージを見逃すことを意味します。
だから、真実は何ですか:)?
一般的に言えば:
1)非永続メッセージはディスクに保存されません。したがって、メッセージングプロバイダーの再起動は提供されません。
2)一方、永続的なメッセージはディスクに保存されます。したがって、それらはメッセージングプロバイダーの再起動を提供します。
ほとんどのメッセージングプロバイダーは、上記の概念に従います。しかし、あなたが指摘したように、いくつかの実装固有の逸脱があります。たとえば、IBM MQには、「半永続的」メッセージ(NPMCLASS
属性)の概念があります。これらは「非永続的」メッセージですが、MQメッセージングプロバイダーの通常のシャットダウンと再起動を提供します。MQが異常終了すると、「SemiPersistent」メッセージは失われます。
つまり、実装の詳細に要約されます。
これがお役に立てば幸いです。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加