問題タブ [saga]
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.
c# - NServicebus の NHibernate Saga Persister の Version プロパティを使用するにはどうすればよいですか?
完全に明白な答え (RTFM) があるかもしれない質問をして申し訳ありませんが、ここで言及されている「バージョン プロパティ」を実際に機能させるにはどうすればよいでしょうか? こちらの Ayende のサイトへのリンクと、こちらの github リポジトリへのリンクは、これが可能であることを示唆しています。同じ問題を説明しているが、実際には明確な解決策が投稿されていない、この他の SO リンクもあります。また、NSB のサンプル コードや、この機能に関連するリリース ノートやドキュメントを見つけることもできませんでした。ただし、複数のワーカー スレッドと ReadCommited を使用して saga を実行する人にとっては重要な知識です。
バージョンと呼ばれる整数プロパティをサガ データ クラスに追加し、タイムスタンプ/行バージョンをサガ データ テーブルに追加するのと同じくらい簡単ですか? これは本当にサンプルのどこかにありますか?私は正しい場所を探していませんか?
また、私が投稿したコメントに基づいて、NSB 3.x にこの機能に関連するバグがあるようです。この機能を利用するには 4.x にアップグレードする必要がありますか? または 3.x で機能させる簡単な方法はありますか?
ありがとう!
編集:
以下のJohn Simonの回答を使用して、最初に次のNSBバージョンを使用してバグに遭遇しました。
私は github でこの問題を開き、何度か行ったり来たりした後、修正を含む開発ビルドを試し、これを機能させました。正式な修正は、NServiceBus.NHibernate v4.4.0 でリリースされました。
答えの私のバリエーションは、これをタイムスタンプSQL列で使用することでした:
数日間ハンマーで叩いた後、見栄えが良くなりました。
testing - Bus.Send() のテスト
私はこの方法を持っています:
そして、メッセージが正しく送信されたかどうかをテストしたいのですが、次のテストでこれを行っています:
しかし、これを行うと、次の例外が発生します。
キューを見ると、キューが追加されていることがわかります。
ここで私の質問は、正しく送信されたことをテストで確認するにはどうすればよいかということです。多分設定で何かをするのを忘れていますか?
お時間をいただきありがとうございます。
nservicebus - 複数のサーバーに広がる NServiceBus の物語
4 つの異なるサーバー (それぞれがプロセスの異なる部分を実行する) を含む複雑なビジネス ロジック プロセスがあります。すべてのサーバーに WCF Web サービスを使用しました。
このプロセスで NServiceBus を使用したいと思います。サガ機能はまさに私が必要としているもののように聞こえますが、このプロセスを実装する方法を理解できません。サガでハンドラーを作成して、それぞれが webService を呼び出すようにする必要がありますか?
または、各サーバーがプロセスの一部を処理するように、すべてのサーバーに同じ saga ホストを配置できますか?
nservicebus - 条件付きでサガを開始
私は2種類のイベントを持っています:
- 人が変わった
- 人の住所が変更されました。
どちらも、新しい人物 (および新しいアドレス) が作成される (作成または更新のようなもの) ときにも公開されます。
新しい人物が作成されると、PersonChanged と PersonAddressChanged の 2 つのイベントが発行されます (この順序で)。ただし、NServiceBus
は非同期であるため、任意の順序で処理できます。また、アドレスが (既存の人の場合) 変更されると、PersonChanged イベントは発生せず、PersonAddressChanged イベントのみが発生します。
私は PersonAddressChanged イベントのハンドラーを書きたいと思います:
- その人物がデータベースに存在するかどうかを確認する
- はいの場合は、更新するだけです
- いいえの場合は、サガを開始し、PersonChanged イベントを待ちます (新しい人物であると仮定します)。
そして、PersonChanged イベントで、人物をデータベースに挿入し、サガを見つけて、PersonAddressChanged のハンドラーをもう一度実行する必要があります。
NServiceBus Sagas でこれを達成できますか? PersonChanged → PersonAddressChanged
特定のアドレス変更に対して PersonChanged イベントが発生しない場合があるため、メッセージ処理が正常に行われているとは言えません。
python - saga_api python ライブラリ : raise AttributeError("コンストラクタが定義されていません")
saga_api ライブラリを使用して Python スクリプトを実行しようとしていますが、残念ながら最初のステップで停止しました :(. Python でこのコマンドを実行しようとすると、次のaga_api.CSG_Module_Library()
エラー メッセージが表示されます。
Windowsでも同じことを行います!
このステップを乗り越えるのを手伝ってくれませんか?!
これはコードです:
!/usr/bin/env パイソン
saga_api、sys、os のインポート
def Import_raster(in__grid):
名前== 'メイン' の場合:
print "完了!"
ここに init があります: .... class CSG_Module_Library(_object): swig_setmethods = {} setattr = lambda self, name, value: _swig_setattr(self, CSG_Module_Library, name, value) swig_getmethods = {} getattr = lambda self, name: _swig_getattr (self, CSG_Module_Library, name) def init (self, *args, **kwargs): raise AttributeError("No constructor defined") repr= _swig_repr def is_Valid(self): return _saga_api.CSG_Module_Library_is_Valid(self) def Get_File_Name(self): return _saga_api.CSG_Module_Library_Get_File_Name(self) def Get_Library_Name(self): return _saga_api.CSG_Module_Library_Get_Library_Name(self) def Get_Info(self): return _saga_api.CSG_Module_Library_Get_Info(self, *args) def Get_Name(self): return _saga_api.CSG_Module_Library_Get_Name(self) def Get_Description(self): return _saga_api.CSG_Module_Library_Get_Description(self) def Get_Author(self): return _saga_api.CSG_Module_Library_Get_Author(self) Get_Version(self): return _saga_api.CSG_Module_Library_Get_Version(self) def Get_Summary(self, *args): return _saga_api.CSG_Module_Library_Get_Summary(self, *args) def Get_Count(self): return _saga_api.CSG_Module_Library_Get_Count(self) def Get_Menu(self, *args): return _saga_api.CSG_Module_Library_Get_Menu(self, *args) def Get_Module(self, *args): return _saga_api.CSG_Module_Library_Get_Module(self, *args) def Get_Module_Grid(self, *args) : return _saga_api.CSG_Module_Library_Get_Module_Grid(self, *args) def Get_Module_Interactive(self, *args): return _saga_api.CSG_Module_Library_Get_Module_Interactive(self, *args) def Get_Module_Grid_Interactive(self, *args): return _saga_api.CSG_Module_Library_Get_Module_Module_Grid_active(self, SG_Module_Interactive) = _saga_api.CSG_Module_Library_swigregister CSG_Module_Library_swigregister(CSG_Module_Library) ....*args) def Get_Module_Grid(self, *args): return _saga_api.CSG_Module_Library_Get_Module_Grid(self, *args) def Get_Module_Interactive(self, *args): return _saga_api.CSG_Module_Library_Get_Module_Interactive(self, *args) def Get_Module_Grid_Interactive(self, *args): return _saga_api.CSG_Module_Library_Get_Module_Grid_Interactive(self, *args) CSG_Module_Library_swigregister = _saga_api.CSG_Module_Library_swigregister CSG_Module_Library_swigregister(CSG_Module_Library) ....*args) def Get_Module_Grid(self, *args): return _saga_api.CSG_Module_Library_Get_Module_Grid(self, *args) def Get_Module_Interactive(self, *args): return _saga_api.CSG_Module_Library_Get_Module_Interactive(self, *args) def Get_Module_Grid_Interactive(self, *args): return _saga_api.CSG_Module_Library_Get_Module_Grid_Interactive(self, *args) CSG_Module_Library_swigregister = _saga_api.CSG_Module_Library_swigregister CSG_Module_Library_swigregister(CSG_Module_Library) ....*args) CSG_Module_Library_swigregister = _saga_api.CSG_Module_Library_swigregister CSG_Module_Library_swigregister(CSG_Module_Library) ....*args) CSG_Module_Library_swigregister = _saga_api.CSG_Module_Library_swigregister CSG_Module_Library_swigregister(CSG_Module_Library) ....
persistence - NServiceBus.Sagas.Impl.Configure.SagasWereFound の代替
NServiceBus をバージョン 3 から 4 にアップグレードすると、コンパイル中に次のエラーが発生します。
エラー CS0234: 型または名前空間名 'Impl' が名前空間 'NServiceBus.Sagas' に存在しません (アセンブリ参照がありませんか?)
c# - 非同期二重 WCF + プロセス マネージャー
クライアントがクライアント UI から WCF サービス ホストへの非同期プロセスを呼び出し、クライアントにプロセスの状態を通知する方法を探しています。これは、saga (プロセス マネージャー)、ドメイン イベント、および WCF 二重接続で実現できると思いますが、その方法はわかりません。
ケースシーケンス(推測)は次のようになります。
- クライアントがプロセスを呼び出す
- クライアントが WCF プロキシを作成する
- プロキシはサービス ホストに接続します
- サービス ホストがクライアントへの二重チャネルを作成する
- サービス ホストは、コマンド バスを使用してプロセスを開始し、二重チャネルを渡します
- プロセス状態変化!
- 関連するデュプレックス チャネルを見つける
- プッシュ バック ステータス変更
- クライアントはステータスの変更を受け取り、視覚化します
私はこれで正しいですか?要するに、関連するクラスはどのように見えるでしょうか? はい、私は NServiceBus を認識しています (そのような場合によく言及されます) が、追加のフレームワークに依存したくありません (NServiceBus が自分で解決できることはすでにたくさんあり、すでに数百を使用しています)あらゆる種類のもののための異なるフレームワークの..)
編集: 例 これは、私の質問を特定する可能性のある実際の例です。
画像を使って魔法やユニコーンのような処理を行う画像処理サーバーがあります。WCF クライアントは画像をサーバーにアップロードし、処理された画像の量を示す進行状況バーを表示します。サーバーは新しい ImageProcessService を (リクエスト スコープで) 開始します。処理中に、プロセスをパーセントで示す数字とともに多数の ImageProcessStateChanged イベントをスローする可能性があります。完了したら、ImDoneEvent をスローする可能性があります。すべてのイベントは、適切なクライアントに信号を返すイベント バスによってキャッチされる必要があります。このプロセスには最大 60 秒かかる場合があり、クライアントごとに 1 回起動できますが、できるだけ多くのクライアントに対して起動できます。
c# - NServiceBus と nvarchar(max)
私の佐賀クラスは次のとおりです。
MSSQL で Sagas を保持しています。作成されたテーブルの構造は次のとおりです。
Data
プロパティ (文字列の型) が にマップされましたnvarchar(255)
。明らかに、そのプロパティに 255 文字を超える文字を割り当てると、メッセージ: で失敗しますString or binary data would be truncated
。どうすれば強制的に作成できnvarchar(max)
ますか?
NServiceBus 4.4.2 を使用しています。