2016-07-13 17 views
2

sqlserverをバックエンドとして使用して、akka.netの永続的なアクターで遊んでいます。Akka.netの永続性(テキスト)

sqlserverの永続性を使用してAkka.netを設定すると、現在のvarbinaryではなくテキストのペイロードが維持されますか?

+0

ユースケース、テキストの永続性の理由、実装の見方について説明できますか? –

+0

監査が簡単で、デバッグが可能です。私は実装を変更することを見ていないが、私は実装を提供できるシリアライズインタフェースと思っていた。私。 json、xml、プロトコルバッファ。どんなものでも、出力と書式を制御する限り。 – hvidgaard

答えて

3

Akka.Persistence.SqlServerは、ペイロードの種類の具体的なシリアライザを検索しようとするakkaシリアル化メカニズムを使用しているため、ペイロードをVarBinaryではなくテキストとして保持できません。このシリアライザはメッセージをbytearrayにシリアル化します。データベースに保存します

var serializer = Serialization.FindSerializerFor(e.Payload); 
var binary = serializer.ToBinary(e.Payload); 
AddParameter(command, "@Payload", DbType.Binary, binary); 
0

簡単な答えいいえ、本当の答え、はいできます。 独自の拡張機能である永続性プラグインを作成する必要があります。 (私はレディスのために書いた)。私はそれが私が働いていますが、たとえばここに見ることができる会社の可否であるので、GitHubの上でそれを公開しhaven'y :

Redis plugin at github

は、私が与えるhere for extra classes you need to implement

YourPersistenceExtension: IExtension{ ... } 

YourExtensionProvider: ExtensionIdProvider<YourPersistenceExtension>{ ... } 

を見てくださいあなたは非常に短いロードマップですが、前に:

Akka.Persistenceには2種類のストレージが含まれています:

  1. ジャーナル - イベントを継続的に保存するために使用されます。
  2. スナップショット - 回復時間を短縮するために決定した時点でスナップショットを保存するために使用されます。

このジャーナルはニーズに合わせて実装することができますが、スナップショットを使用する必要はありません(ただし、この回答の目的は重要ではありません)。あなたは/書き込みのための要件を実装して、あなたのSQL Serverへのイベント(またはお好みの任意の他のデータ・ストア)を読むことができる場所ですAkka.Persistence.AsyncWriteJournal

から派生する必要があるジャーナルを実現するために

、あなただけのあなたが欲しいものを読み書きし、それを管理します。たとえば、私はソートされたセットを使用しました。つまり、私のアクターには固有のIDが含まれていました。特定のアクターに関連するすべての持続イベントを、そのIDに対応する単一の値(ソートされたセット)にグループ化できます。アクターのすべてのイベントをすばやく簡単に復元したいので、これは重要です。さらに、基本クラスAsyncWriteJournalには、シーケンスの順序表記で動作するメソッドが含まれているので、ソートされたセットを使用するのは当然です。これらの考慮事項は、永続性拡張を実装する際に使用する必要があります。

マニュアルは、ここで見つけることができます:あなたは、データストア構成の他のタイプと同じようにAsyncWriteJournal

あなたはあなたのタイプ、名前空間を使用してhoconファイルにあなたのジャーナルの使用を設定する必要があります。

ジャーナルを設定した後、AkkaはPersistentActor(または派生型)からPersist/PersistAsyncを呼び出すと、プラグインを使用して状態/イベントを保持します。

私はそれが余計に聞こえるが、実際にはそうではないことを知っている。私がここで説明したロードマップや、あなたが本当に必要かどうかは、