3

メールが受信ボックスに送信されると、メッセージが届き、その内容を DB に挿入しています。次のような org.springframework.integration.core.Message があります。

public void receive(Message<?> message)
{
    //I am inserting message contents into DB
}

障害が発生した場合、フェイルセーフな回復メカニズムが必要でした。私が考えているのは、Message オブジェクトをファイルにシリアライズし、後でデシリアライズして DB に更新することです。

質問 1. この状況で、メッセージ オブジェクトをシリアル化する方法は? 2.シリアライゼーション以外に使用できるメカニズムはありますか?

EDIT 以前にシリアライゼーションを行ったことがありません.ObjectOutputStreamを使用するには、クラスがSerializableを実装する必要があると聞きました.この場合、メッセージのサブクラスを作成したくないので、メッセージをファイルにシリアライズする方法は?

4

3 に答える 3

7

もちろん、jvm以外にも多くのシリアル化メカニズムがあります。

  • XML
  • JSON
  • BSON
  • MessagePack
  • protobufs
  • ..。

それらのいくつかはテキストベースであり、いくつかはバイナリです。すべてに欠点と利点があります。テキストベースのものは人間が読める形式であり、バイナリのものはより高速で、占有するスペースも少なくて済みます。

上記のすべての形式を処理するJavaライブラリがあります:JAXB(XML)、Jackson(JSON)など。

于 2013-01-03T07:50:23.713 に答える
1

この状況で、Message オブジェクトをシリアル化する方法は? シリアル化以外に使用できるメカニズムはありますか?

メッセージから必要なすべてのデータを抽出して保存します。これは、任意の方法で行うことができます。

保存したデータを新しいメッセージに入力することで、逆シリアル化できます。

于 2013-01-03T08:53:31.477 に答える
-1

私がおそらくそれを正しく理解しているかどうかはわかりません..しかし、Messageが多くの文字列といくつかの整数にすぎないと仮定すると、ObjectOutputStreamを直接使用してファイル(バイナリ)に書き込んでから後で読み込むことができます。なぜだめですか?

Message e = new Message();
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("whatever");
oos.writeObject(message);

// read in
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("whatever");
Message e = (Message) ois.readObject();
于 2013-01-03T08:01:27.477 に答える