2016-09-07 19 views
1

私は現在約JMSを読んでいますが、いくつかの記事の後に、私の頭の非永続メッセージで永続的なサブスクリプションに関する混乱が少しあります。始まるのをしてみましょう: http://www2.sys-con.com/itsg/virtualcd/java/archives/0604/chappell/index.html - それは言う:JMSの耐久性と永続性

  • 非永続メッセージが切断さ、耐久性 加入者のために意図されている場合は、それ は永続的なメッセージであるかのようにメッセージサーバがディスクにメッセージを保存し 。この場合、持続メッセージと非持続メッセージの差は微妙ですが、非常に重要です。 非永続メッセージの場合、JMSプロバイダは、 の接続解除された恒久サブスクライバのためにメッセージを に書き込む前にに失敗して、ディスクにメッセージを書き込む可能性があります。 http://openmessaging.blogspot.com/2009/04/durable-messages-and-persistent.htmlは全く違うものは言う:メッセージは

そして別のソースを失われることがあり

  • このトピック上の任意の永続サブスクリプション、 メッセージの後、コピーが存在する場合アクティブな恒久サブスクライバに送信されます。 の非アクティブな永続サブスクリプションの場合、メッセージ のコピーがメモリに保存され、次にそれらがアクティブになるときに送信されます。

    この保存されたメッセージは、ブローカを再起動すると失われます。 の非永続メッセージがディスクに保存されていないため、ブローカの再起動は、 メッセージをまだ受信していない非アクティブな永続サブスクリプションがメッセージで逃してしまうことを意味します( )。

だから、真実は何です:)?

答えて

1

一般的には、

1)非永続メッセージはディスクに保存されません。したがって、メッセージング・プロバイダーを再始動することはありません。

2)一方、永続メッセージはディスクに保存されます。したがって、彼らはメッセージング・プロバイダーを再始動します。

ほとんどのメッセージングプロバイダは、上記の概念に従います。しかし、あなたが指摘しているように、いくつかの実装固有の偏差があります。たとえば、IBM MQには「半永続」メッセージ(NPMCLASS属性)の概念があります。これらは "Non Persistent"メッセージですが、通常のシャットダウンとMQメッセージングプロバイダの再起動を行います。 MQが異常終了すると、 "Semi Persistent"メッセージが失われます。

したがって、実装の詳細に至ります。

これが役に立った。

関連する問題