1

現在、Apache Ignite をアプリケーションに統合して、クラスター内でセッションを共有しています。

この時点で、2 つのローカル Tomcat インスタンス間でセッションを正常に共有できますが、まだ機能していないユース ケースが 1 つあります。

まったく同じコードで 2 つのローカル インスタンスを実行すると、すべてうまく機能します。しかし、Ignite ロジックが本番クラスターに統合されると、次のユース ケースが発生します。

  1. Node 1およびNode 2バージョン 1のアプリケーションを実行
  2. この時点で、アプリケーションのバージョン 2をデプロイします。
  3. Tomcat はノード 1で停止され、バージョン 2がデプロイされ、デプロイの最後にノード 1の Tomcatが再び開始されます。
  4. ノード 1にはバージョン2のコードがあり、ノード 2にはまだバージョン 1があります。
  5. Tomcat はノード 2で停止され、バージョン 2が展開され、展開の最後にノード 2の Tomcatが再び開始されます。
  6. ノード 1にはバージョン2のコードがあり、ノード 2にはバージョン 2があります。
  7. デプロイが完了しました

このユース ケースを同じグリッド内の 2 つの tomcat インスタンスでローカルに再現すると、Ignite Web セッション クラスタリングが失敗します。私がテストしたのは、ユーザー セッションに存在するクラス (プロファイル) の 1 つの「文字列プロパティ」を削除することでした。この変更されたクラスでノード 1を開始すると、次の例外が発生します。

Caused by: java.lang.ClassNotFoundException: 
Optimized stream class checksum mismatch 
(is same version of marshalled class present on all nodes?) [expected=4981, actual=-27920, cls=class nl.package.profile.Profile]

これは、展開の一般的/通常の使用例です。私の質問は、このユースケースをどのように処理するのですか? Ignite でこの種の問題を解決/回避する方法はありますか?

4

1 に答える 1