異なるサブシステム間の統合アーキテクチャをモデル化しました。サブシステムからのすべての通知は、プリミティブ を使用してサブスクライブされたサブシステムに送信されますPublish
。これらの通知はメソッドfor
内のループで送信されるHandler
ため、すべて同じTransactionScope
. これを説明するために簡単な例を示しました。クライアントは、プリミティブを使用して可変数のメッセージを送信するサーバーにメッセージを送信しますPublish
。これはサーバー ハンドラです。
public void Handle(MyMessage message)
{
for (int i = 0; i < message.numberOfNotifications; i++)
{
Bus.Publish<NotificationMessage>(m =>
{
m.myPersonalCount= i;
}
);
}
}
私が探していて理解できないのは、i
30 以下に設定するとすべて問題ないということです。31 以上から、次のエラー メッセージが表示されます。
could not execute query
[ SELECT this_.SubscriberEndpoint as y0_ FROM "Subscription" this_ WHERE this_.MessageType in (?) ]
そして、私が得る内部例外を見るとUnable to enlist in a distributed transaction
.
プリミティブを使用して同じことを試みましたSend
が、すべて (10k メッセージで試行) であったため、これはPublish
ディレクティブのみに関連する問題です。
dbms には Oracle 10g を、クライアントには Oracle 11g を使用しています。
エンドポイントがトランザクション対応でない場合、問題はないので、問題は TransactionScope のみに関係しているようです。
どんな助けでも大歓迎です、ありがとう