問題タブ [event-driven-design]
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.
distributed-computing - MDA を使用する場合、べき等イベント ハンドラーと非べき等イベント ハンドラーを区別する必要がありますか?
この質問は、イベント ソーシングの使用を前提としています。
イベントを再生して現在の状態を再構築する場合、イベント ハンドラーはべき等である必要があります。たとえば、ユーザーが自分のユーザー名を正常に更新すると、文字列プロパティUsernameUpdated
を含むイベントが発行される場合があります。newUsername
現在の状態を再構築するとき、適切なイベント ハンドラーがイベントを受け取り、オブジェクトのプロパティをイベント オブジェクトのプロパティにUsernameUpdated
設定します。つまり、同じメッセージを複数回処理すると、常に同じ結果が得られます。username
User
newUsername
UsernameUpdated
しかし、外部サービスと統合する場合、そのようなイベント ハンドラーはどのように機能するのでしょうか? たとえば、ユーザーがパスワードをリセットしたい場合、User
オブジェクトはPasswordResetRequested
イベントを発行する可能性があります。これは、SMS を送信するコマンドをサードパーティに発行するコードの一部によって処理されます。アプリケーションが再構築されたときに、この SMS を再送信したくありません。この状況をどのように回避するのが最善ですか?
domain-driven-design - 副作用のあるイベントソーシング
おなじみのイベント ソーシング パターンを使用してサービスを構築しています。
- リクエストが受信されます。
- アグリゲートの履歴がロードされます。
- アグリゲートが (その履歴から) 再構築されます。
- 新しいイベントが準備され、手順 1 からの着信要求に応答して集計が更新されます。
- これらのイベントはログに書き込まれ、すべてのサブスクライバーが利用できるようになります (発行されます)。
私の場合、ステップ 5 は 2 つの部分で完了します。イベントはイベント ログに書き込まれます。バックグラウンド プロセスは、イベント ログから読み取り、オフセットから始まるすべてのイベントを発行します。
場合によっては、集計に関連するイベントに加えて、副作用を公開する必要があります。システムに関する限り、これらは他のサービスによって消費され、他のサービスの状態に影響を与えるため、イベントでもあります。ただし、このサービスの集計の履歴には影響せず、再構築する必要はありません。
コードでこれらをどのように処理すればよいですか?
オプション 1 - 副作用のあるイベントをイベント ログに書き込まないでください。ステップ 5 の前に、メイン プロセスでこれらを公開します。
オプション 2 - すべてをイベント ログに書き込み、履歴が読み込まれるときに副作用のあるイベントを無視します。(これらは歴史の一部ではありません!)
オプション 3 - 副作用のあるイベントをダミーの集計に書き込み、公開されても読み込まれないようにします。
オプション 4- ?
最初のオプションでは、同時実行違反があると問題が発生する可能性があります。ステップ 5 で書き込みが失敗した場合、副作用を簡単にロールバックすることはできません。2 番目のオプションは、集計の履歴の一部ではないイベントを書き込みます。ステップ 2 でロードするときは、これらの副作用イベントを無視する必要があります。3番目のオプションはハックのように感じます.
これらのうちどれが正しいと思いますか?
c++ - C++ でのイベント駆動設計
私のイベント駆動型アプリケーションには、共通の問題があります。次のクラス図を想定します。
ここではオブザーバーパターンを使用しています。Worker
同じスレッドにWorkerManager
住んでいます。次に、一連のアクションを想定します。
Worker
メソッドの途中でリスナークラスを呼び出して結果を報告するWorkerManager
(これは のリスナーです)クラスWorker
を削除/変更することを決定しますWorker
Worker
modifiedを削除して、メソッドの実行を継続します。プログラマーはこれらの状況を考慮する必要があり、複雑でエラーが発生しやすくなります。
コードでは、次のようになります。
変更方法:
今、私は問題に対するこれらの解決策を見ています:
- リスナー クラスを最後に呼び出す必要があることをコード スタイル ガイドで設定します。しかし、それは非常に壊れやすく、エラーが発生しやすいソリューションです。
- QTキュー接続の並べ替えを行いました。
QT キュー接続はメタオブジェクト システムで行われ、私のプロジェクトには多すぎます。スレッドのイベント ループでリスナーのコールバックを延期できる、よりシンプルなツールが必要です。
この問題は、イベント ドリブン デザインではよくあることだと思います。処理方法の例はどこで見ることができますか?
java - ZeroMQ、inproc: transport を pub/sub メッセージング パターンと共に使用できますか
シナリオ :
イベント ドリブン メカニズムをZeroMQ
(具体的には)評価していました。jeroMq
アプリケーションは、複数のサービス (パブリッシャーとサブスクライバーの両方がサービス) が同じ jvm または個別のノードに存在できる場所に分散されます。これは、デプロイメント アーキテクチャによって異なります。
観察
遊んでみるために、 jero mq (バージョン:0.3.5) を使用して、 transport としてpub
/sub
パターンを作成しました。inproc:
- スレッドの公開は公開できます (公開されているように見えますが、少なくともエラーはありません)
- 別のスレッドにあるサブスクライバーは何も受信していません。
質問
/inproc:
と一緒に使用できますか?pub
sub
グーグルを試してみましたが、具体的なもの、洞察を見つけることができませんでしたか?
pub
/ sub
withのコードサンプルinproc:
jero mq (バージョン:0.3.5) を使用したインプロセス pub サブの作業コード サンプルは、後でこの投稿にアクセスする人にとって役立ちます。A
1 つのパブリッシャーがトピックおよびを公開しB
、2 人のサブスクライバーがA
および をB
別々に受け取る
c++ - イベント駆動型シミュレーターで同時に発生するイベント
私は単純なイベント駆動型シミュレーターを開発しようとしていて、ここから始めました
http://stdcxx.apache.org/doc/stdlibug/11-3.html
いくつかの変更を加えて例をいじっていたとき、2 つのイベント (到着、出発) が同時に発生した場合 (時間単位 5 など)、シミュレーターが一番上にあるものをポップするという状況に遭遇しました。以下のコード スニペットからわかるように、イベント キュー。
両方のイベントが同時に発生した場合、出発イベントの前に特定のイベント (最初に到着イベント) を常にポップする条件を強制するにはどうすればよいですか。
どんな助けでも大歓迎です。
node.js - ブロックループなしでノードjsで大きなバイナリファイルを読み取る方法は?
イベント駆動型プログラミングの基本を学ぼうとしています。そのため、演習として、大きなバイナリ ファイルを読み取り、それに対して何かを実行するプログラムを作成しようとしていますが、ブロッキング呼び出しを行うことはありません。私は次のことを思いつきました:
完全なファイルを読み取るために while ループを配置する必要があることはわかっていますが、上記のコードでは、ファイルの最初の 1024 バイトだけを読み取っているため、ブロッキング ループを使用せずにファイルの読み取りを続行する方法を定式化することはできません。どうすればそれができますか?
amazon-web-services - 複数のホストを使用して AWS SQS からのメッセージを処理する
を含むアプリケーションがAWS SNS
あり、SQS
複数のホストで実行する必要があります。正確な問題の説明は次のとおりです。
ID
イベントが発生するたびに、SQS キューがサブスクライブされている SNS トピックにメッセージが発行されます。これで、キューにメッセージが届きます。ここで、複数のホストがキューからメッセージを読み取り (2 つのホストが同じメッセージを読み取らないようにする必要があります)、そのメッセージを Amazon S3 の共通ファイルに書き込みます。「ホストがメッセージの読み取りに失敗した場合」や「同じホストまたは異なるホストで同じメッセージを 2 回読み取らない」などの問題を考慮する必要があります。
このタスクを達成するために通過できる方法または参照を誰かが提案できますか?