私はスタジオを使ってこの問題を解決する方法を理解するのに苦労しており、おそらくSOの良いユーザーに手を差し伸べると助けになるかもしれないと考えました。データベースの同期とWebサービスの選択
私はクライアントからリクエストを受け取るシンプルなWebサービスを持っています。この要求はデータベーステーブルへの挿入を実行し、このデータベースを事実上メッセージキューとして使用します。別のプロセスが定期的にこのテーブルをポーリングし、メッセージに対して追加の処理を実行し、結果を出力テーブルに書き込みます。データベースの挿入と後続の選択は、送られたメッセージの結果を確実に得るために渡すことができるcorrelationIdによってリンクされます。残念ながら、これが統合されるソフトウェアは、このパターンが正しく機能することを要求します。
ここで必要とされているワークフローの:(?やpoll /再試行/など)
のHttpRequest - - >テーブルにレコードを挿入>待ち時間はレコードが(を持つ独立したプロセスによって、別のテーブルに書き込まれるまで同じ相関ID) - >この他のテーブルのデータをhttpRequestに戻します
ここでは、これで得られるサンプルフローがあります。奇妙なことに、このフローは実際にペイロードを返しますが、常に「1」と思われます。行が存在してから結果の行が返されるまで、この流れでデータベースクエリを再試行させる方法はよく分かりません。
2つのデータベース呼び出しをどのように同期する必要がありますか?多分コンポーネントの異なる組み合わせを使って、これはミュール内で可能でしょうか?
ありがとうございました。
<flow name="mainFlow">
<http:listener config-ref="HTTP_Listener_Configuration" path="hello" doc:name="HTTP"/>
<cxf:jaxws-service doc:name="CXF" configuration-ref="CXF_Configuration" serviceClass="kansas.MuleTestServiceImpl"/>
<db:insert config-ref="Oracle_Configuration" doc:name="Database">
<db:parameterized-query><![CDATA[insert into tblRequest (id, correlationId) values(#[payload], #[message.correlationId])]]></db:parameterized-query>
</db:insert>
<until-successful objectStore-ref="MyObjectStore" maxRetries="5" millisBetweenRetries="2000" doc:name="Until Successful" > <!-- failureExpression="???" -->
<db:select config-ref="Oracle_Configuration" doc:name="Database">
<db:parameterized-query><![CDATA[select correlationId,msgResponse from tblResponse where correlationId = #[message.correlationId]]]></db:parameterized-query>
</db:select>
</until-successful>
<logger level="INFO" doc:name="Logger" message="#[payload]"/> <!-- why is payload always = 1? -->
</flow>
はこのいただきありがとうございます。この類推は確かに大いに助けになり、私はこれに関するいくつかの問題を乗り越えることができます。私は、私が持っている問題を説明する仕事が貧弱かもしれないと思います。私が持っている主な問題は、「成功するまで」というコンポーネント(またはおそらく別のコンポーネント)は、レコードが別のプロセスによって挿入されるまで待たなければならず、結果の挿入がペイロードになるはずです。 – Beta033
この場合、レコードが挿入されているかどうかを確認する必要があります。次に、依存する挿入を行う必要があります。期待して挿入しようとすると動作しますが、主に例外を期待するのは良い考えではありません。 「おそらく」この新しい挿入物は、おそらく良いものをロックするかもしれないし、あなたはデッドロックになるでしょう。 – Alex
ありがとうアレックス、主に私がやろうとしているのは、データベースに置かれたリクエストメッセージを相関させてから、リクエスタにメッセージがデータベースからポーリングされるまで待つことです。 – Beta033