問題タブ [neventstore]
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.
neventstore - 複数のスレッドが使用されている場合、NServiceBus を使用する EventStore でデッドロックが発生する
現在、EventStore、CommonDomain、および NServiceBus を使用するプロジェクトに取り組んでいます。 NumberOfWorkerThreads を 1 に設定すると、すべてのサービス (nservicebus - 6 つあり、それぞれに独自のイベント ストアがあります) が完全に実行されますが、 NumberOfWorkerThreads を複数に設定すると、大量のデッドロックが発生し始めます。つまり、1 分間に少なくとも 50 回発生します。すべてのデッドロックは Commits テーブルにあります。私が見つけたものから、複数のスレッドで同じ集計を更新しているように見えます。これは、カタログのインポート中に簡単に発生する可能性があり、あるスレッドで数量を更新しながら、別のスレッドで価格を更新していますスレッドであるため、両方のスレッドが同じ集計を更新しようとしています。
他の誰かがこの問題を抱えていましたか? どのように回避しましたか?
c# - EventStore と RavenDB の永続性 JsonReaderException
JOliver の EventStoreをRavenDBと結び付けようとして、問題が発生しました。RavenEventStore という Raven で新しい DB を作成しました。
以下は私のワイヤーアップです。
Wireup.Init() が呼び出されると、この例外は RavenDb 側で発生します。
Url: "/indexes/RavenCommitByDate" Newtonsoft.Json.JsonReaderException: 値の解析中に予期しない文字が検出されました: 。行 1、位置 1。d:\Development\Releases\Json\Working\Src\Newtonsoft.Json\JsonTextReader.cs: の Newtonsoft.Json.JsonTextReader.ParseValue(Char currentChar) で: Newtonsoft.Json.JsonTextReader.ReadInternal の 699 行目() in d:\Development\Releases\Json\Working\Src\Newtonsoft.Json\JsonTextReader.cs:499行目 Newtonsoft.Json.Serialization.JsonSerializerInternalReader.ReadForType(JsonReader reader, Type t, JsonConverter propertyConverter) in d:\ Development\Releases\Json\Working\Src\Newtonsoft.Json\Serialization\JsonSerializerInternalReader.cs: d の Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader リーダー、タイプ objectType) の 1072 行目:
RavenDB ログにも例外が表示されます。
UsingAsynchronousDispatchScheduler() メソッドも削除して、すべての可能性を排除しようとしましたが、同じエラーが発生しました。私が使用しているコードは、 https ://github.com/joliver/EventStore/blob/master/doc/EventStore.Example/MainProgram.cs にある例に厳密に基づいています。
誰もこれを経験しましたか?Google でも何も見つかりませんでした。
neventstore - JOliverEventStore-例の例外
docでEventStoreの例を実行すると、SqlPersistenceFactory.csの39行目に例外がスローされます。値をnullにすることはできません。パラメーター:dialect
app.configの接続文字列エラーかどうか?</ p>
cqrs - CQRSおよびEventStoreを使用した作成の同時実行
ベースライン情報: ログインに外部OAuthプロバイダーを使用しています。ユーザーが外部OAuthにログインすると、システムに入ることができます。ただし、このユーザーはまだ私のシステムに存在していない可能性があります。これは実際にはテクノロジーの問題ではありませんが、私はJOliverEventStoreをその価値のために使用しています。
論理:
- 新規ユーザー向けのGUIDは提供されていません。メールアドレスを持っています。
- コマンドを送信する前に読み取りモデルを確認します。ユーザーの電子メールが存在する場合は、IDを使用してLoginコマンドを発行し、存在しない場合は、生成されたIDを使用してCreateUserコマンドを発行します。私の問題は、新しいユーザーの場合です。
- 新しいIDでイベントストアに保存が行われます。
問題: ブラウザーの更新または読み取りモデルとの整合性が達成される前に発生するその他の異常のために、読み取りモデルが更新される前に2つの作成コマンドが何らかの形で発行されたと想定します。それは大丈夫ですそれは私の問題ではありません。
何が起こるか: 新しいIDはGuidコームであるため、イベントストアがこれらの2つのCreateUserコマンドが同じユーザーを表していることを知る可能性はありません。読み取りモデルに到達するまでに、読み取りモデルは(同じ電子メールを持っているため)認識し、2つのレコードをマージするか、その他の補正アクションを実行できます。しかし、現在、私の読み取りモデルは、これらが2つの別個のエンティティであるとまだ考えているイベントストアと同期していません。
おそらくそれは問題ではありません:
- イベントを再生すると、読み取りモデルにも同じ効果があるため、問題ありません。
- 両方のコマンドは重複する「作成」コマンドであるため、同じ情報が含まれている必要があります。したがって、イベントストアで何かを失っているわけではありません。
誰かが同様の問題をどのように処理したかを明らかにすることができますか?何らかの補正アクションを実行する必要がある場合、読み取りモデルサービスは、重複エントリがあることに気付いたときに、ある種の補正コマンドを発行しますか?私が検討していないより単純な方法論はありますか?
mongodb-.net-driver - NEventStore の mongodb 永続性を設定するときに必要な各イベント タイプの BsonClassMap の登録?
Oliver の EventStoreにmongodb の永続性を設定する場合BsonClassMap
、イベントの種類ごとに登録する必要がありますか? これを行わないと、例外が発生しますUnknown discriminator value 'InventoryItemCreated'
。ここで説明したように、すべてのイベント タイプを MongoDB に登録し、イベント ストアを構成します。
これは本当にやるべきことですか?
MongoDB の永続性を備えた Oliver のイベント ストアをサポートするために Greg Young の「最も単純なもの」を変更しているときに、この問題に遭遇しました。コードは github にあります。
関連する観察結果 (tldr)
イベント タイプを登録しない場合は、空のイベント ストアから開始できます (イベントを逆シリアル化する必要がないため)。1 つのインベントリ アイテムを追加でき、イベント ストアには 1 つのコミットがあります。
アプリケーションを再起動してこの単一のイベントを再生するとPayLoad.Body
、Unknown discriminator value 'InventoryItemCreated'
.
InventoryItemCreated
イベントを正常に再生する別の方法を 2 つ見つけました。
- 再生する前に別のインベントリ アイテムを作成すると、すべてのイベントを再生できます。どうやらMongoDBはディスクリミネーターを知っています。
- 識別子を完全な型名に手動で変更します。
システムがすべてのイベント タイプを登録しなくても機能するように見えるのに、これを防ぐデフォルトの識別子決定戦略を選択するのは少し気まずい気がします。
c# - EventStoreからイベントを取得する
ESに保存されているすべての履歴イベントに基づいて新しいビューモデルに入力したい場合、どうすればよいですか?
見えますIPersistStreams.GetFrom(DateTime)
が、一気に全部手に入れるのはちょっと怖そうです。
それらをまとめて取得することが私が探しているものだと思います。
EventStore3.0は私が使用しているものです。
cqrs - Jonathan Oliver の EventStore は積極的に開発されていますか?
Windows Azure でホストされる新しいプロジェクトを開始しています。バックエンドとして RavenDb を使用しており、CQRS とイベント ソーシングを使用したいと考えています。
Jonathan の EventStore の良いレビューを読みましたが、それは私のアーキテクチャに完全に適合します。これは薄いレイヤーであり、RavenDb をストアとして使用できるからです。さて、3.0 リリース (最新の公式) は 1 年前のものであり、新しい 3.1 はまだリリースされていないことに気付きました (ブランチでいくつかの活動があります)。CommonDomain プロジェクトが統合されているため、3.1 バージョンを使用したいと考えていますが、バージョン 3.0 と現在の CommonDomain を別々に参照しても問題はありません。
特に Greg Young が彼の EventStore (geteventstore.com) をリリースして以来、EventStore が積極的に開発され、維持されるかどうかは疑問です。それには独自の永続性があり、私のイベントを RavenDb に保存できないことがわかっているので、私はそれに行くのを少しためらっています。
要約すると:
- ジョナサンの EventStore は稼働していますか?
- はいの場合、現在の公式の 3.0 リリースを使用して、CommonDomain プロジェクトを個別に参照する必要がありますか?
- 3.1 ブランチ (CommonDomain がマージされた) の準備はできていますか?
- 結局、Greg Young の EventStore に切り替える必要がありますか?
- それとも、Lokad.CQRS を調査する必要がありますか? (Jonathan の EventStore は使用していないと思います)
PS。Joliver の EventStore を fork したり、修正やマイナーな機能を提供したりすることは気にしません。
c# - JOliver EventStore ディスパッチ フラグが設定されていません。イベントは再起動のたびに再生されます
EventStore を使用していますが、動作しているように見えます。イベントはメモリ内ブローカーによって保存およびディスパッチされ、読み取りモデルによって処理されます。しかし、EventStore Commits テーブルの「dispatched」フラグが何らかの理由で設定されていないため、アプリを再起動するたびにすべてのイベントが再生されます。ストアとして SQL Server 2012 を使用しています。エラーは発生していません。このフラグが設定されない理由は何ですか?
私のコード:
cqrs - 再起動時に Eventstore ディスパッチ フラグを true に設定
私は JOliver の EventStore を使用していますが、今のところ同期ディスパッチャーを使用しているため、コマンドが着信すると、コマンド ハンドラーによって処理され、イベント ストアに保存され、イベント ハンドラーが読み取りモデルを更新します。この段階では NServiceBus を使用していませんが、後で導入したいと考えています。私の eventstore データベースと readmodel は同じマシン上にあります。
私が気付いたのは、イベント ハンドラーで例外が発生した場合 (また、DTC を使用していないため)、イベントがイベントストアでコミットされ、ディスパッチ フラグが false に設定されることです。これは私が予想したことですが、サーバーを再起動すると、フラグは true に設定されますが、イベント ハンドラー コードは呼び出されません。
なぜこれが起こっているのですか?
ディスパッチされていないイベントはディスパッチされるか、イベント ストア コードに何らかの再試行メカニズムがあると想定しました。
ravendb - マルチテナントアプリ用のRaven永続性を備えたCommonDomain/EventStore
マルチテナントアプリケーションでEventStoreのRavenPersistenceをどのように設定する必要がありますか?
サービスバスを介して受信したコマンドを処理するAzureワーカーの役割があります。各メッセージは異なるテナントに属している可能性があります。実際のテナントはメッセージヘッダーで送信されます。つまり、各メッセージを受信した後でのみ、どのデータベースを使用するかがわかります。
CommonDomainを使用しているので、コマンドハンドラーがIRepository
挿入されています。
現在、各メッセージの処理中に新しいストアを構築しています(DefaultDatabaseを設定しています)が、これが最適な方法ではない可能性があると感じています。
- 単一のイベントストアを作成してからデータベースを切り替える方法はありますか?
- そうでない場合、各テナントのストアをキャッシュできますか?
- RavenDBでEventStoreを使用するマルチテナントサンプルについて知っていますか?