問題タブ [akka-persistence]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
scala - AKKA の永続性と ES および CQRS の原則を理解する
私は最近、ES モデルと CQRS モデルに関するビデオをいくつか見ました。また、AKKA の永続性に関する講演もいくつか見ました。それらが何についてのものかは知っていますが、実行される実際のコードを書くのに問題があります。
いくつか質問があります。ビューとイベントスタックを通信させるにはどうすればよいですか? イベントは、渡されたのと同じ永続性 ID のビューと永続アクターの間で渡されますか? モデルによると、永続的なアクターとビューは何を担当していますか?
編集:ビジネスロジックをどこに配置すればよいですか? モデルによると、書き込みでそれを行う必要がありますが、cmd を検証するために読み取りで何かをチェックする必要がある場合はどうすればよいですか?
scala - ジャーナルを 1 回だけ読む
akka-persistence の PersistenceQuery を使用して、初期状態を管理するアクターにロードしています。起動時に一度だけ再生したいのですが、ログに送信し続けます。
これは私がそれを達成しようとして書いたプログラムです。
akka - ストリーミング イベントとルール ベースのトリガー
Event-A
、Event-B
、が互いにEvent-C
数日以内に到着する (場合によっては順序が狂っている) 場合Event-ABC
、セット内にすべてのイベントがあることがわかったら、派生物を生成する処理をトリガーしたいと考えています。
イベントは userId/sessionId でグループ化されます
現在、単一のキューからすべてのイベントを読み取り、データベースに書き込み、どのイベントが書き込まれたかを示すメタデータを更新します。メタデータにルールに基づくすべてのイベントが含まれたら、集計処理をトリガーします。このアプローチには、同じグループに属するイベントを処理するときにキュー ワーカーが同じキーを叩く可能性があるため、パフォーマンスの問題がいくつかあるため、代替手段を探しています。
私が望むのは、処理のための userId/sessionId に基づいた、よりきめ細かいソフトウェア定義のルーティングおよびキューイング イベントです。私がやろうとしていることは、イベントソーシングにいくぶん似ていると思います。
私は Akka がこの種の問題に役立つかどうかを調べていました。userId/sessionId ごとのアクターを使用すると、不要な同時実行が削減され、アクター内にトリガー ロジックが含まれます。私が懸念しているのは、非常に多くのアクタを使用するとメモリが必要になる可能性があることです。
scala - PersistentView の更新を外部からトリガーする方法
docsによると、ビューの更新を外部からトリガーすることは、次のように機能するはずです。
view ! Update(await = true|false)
ただし、送信と待機は機能しないようです:
ビューステートは更新されていません。
尋ねても機能しません-答えがなくUpdate
、Await
タイムアウトします:
IIUC、Update
メッセージの処理は によって実行されPersistentView#State#stateReceive
ます。その受信はログに記録されておらず、受信と処理を確認する方法がわかりません。Update
メッセージreceive
は、私のPersistentView
.
機能するのは、次のように非常に短い更新間隔を設定すること.conf
です:
デバッグ ログは、Journal がビューを更新していることを示しています。
... a.p.i.e.InMemoryJournalStorage akka://entityViewSpec/user/JournalStorage - received handled message GetJournalEntriesExceptDeleted(ea-ZleUNl1a3N,1,1,9223372036854775807) from Actor[akka://entityViewSpec/temp/$o]
Update
送信および待機中にこのログ エントリが表示されない
短いスリープの後、期待どおりにビューが更新されます。
では、常に自動更新を実行せずにビューの更新を外部からトリガーするにはどうすればよいでしょうか?
アッカ 2.4.8
ありがとうございました
編集
私の間違いは非常に単純でした - 最初のメッセージを保持するのに十分な時間を与えていませんでした -Update
関連するイベントがまだストアから利用できないときに呼び出しが受信されました. 自動更新設定は、更新前に 100 ミリ秒待機しました。メモリ内永続性を備えたローカル マシンでは、Update
. 次に、システムがイベントをフェッチして適用する時間を与えます。
動作していません:
働く:
scala - PersistenceQuery でスナップショットを使用する方法はありますか
PersistentView
akka 2.4 で非推奨になりました。ドキュメントでは、PersistenceQuery
代わりに切り替えることをお勧めします。ただしPersistenceQuery
、スナップショット ストアをクエリする機能がなく、イベント ジャーナルのみに限定されているようです。
多数のイベントから状態を復元するには時間がかかるため、スナップショットを使用できることは私にとって重要です。
ここでの非推奨は時代を少し先取りしていますか? このまま作業を続けるべきですか、PersistentView
それとも何か不足していますか? のみを使用してスナップショットを操作するにはどうすればよいPersistenceQuery
ですか?
ありがとうございました
akka - DB 呼び出しを必要とする CQRS コマンドの検証
CQRS で、DB 呼び出しを必要とするコマンドを検証する最良の方法は何ですか? たとえばOrder
、コマンドを検証している集約がCommitOrder
あり、十分な在庫がない限り、このコマンドを受け入れたくありません。この場合、コマンド ハンドラーは注文商品の在庫があるかどうかをどのように確認できますか? 書き込み側から読み取り側を照会できますか?
注:実装にはakkaを使用しています