MassTransit
のために現在NServiceBus
を切り替えていますが、リクエスト/応答パターンに少し問題があります。MassTransit同じキューに入ってループが発生する
では、私はHandler
で返信でき、送信したクライアントに戻ります。応答は、このようにループを作成し、バックそれはから消費されたことをキューに送信されているかのようにそれが表示されます
MassTransit
で
、...
奇妙なことに、私はインメモリを使用してバスを作成していた場合、クライアントとコンシューマーの両方が同じマシン上にいる場合、私は問題はありません。
私はそれがそのメッセージ・タイプを受信するための設定はありませんから、また奇数である、それを応答をキャッチし、代わりに私のConsumer
ピックするために私のクライアントを期待してい...
私は、クライアントの中に何かが足りませんリクエストをセットアップしますか?
クライアント:
....
IRequestClient<IWorklistRequest, IWorklistResponse> client = CreateRequestClient(busControl, WorklistEndpointUri);
Console.Write("Sending Request");
Task.Run(async() =>
{
IWorklistRequest request = new WorklistRequest
{
CurrentDateFrom = new DateTime(2016, 11, 07)
};
var response = await client.Request(request);
Console.WriteLine("Worklist Items retrieved: {0}", response.ExamItemList.Length);
}).Wait();
....
static IRequestClient<IWorklistRequest, IWorklistResponse> CreateRequestClient(IBusControl busControl, string endpointAddress)
{
Console.WriteLine("Creating Request client...");
var serviceAddress = new Uri(endpointAddress);
IRequestClient<IWorklistRequest, IWorklistResponse> client =
busControl.CreateRequestClient<IWorklistRequest, IWorklistResponse>(serviceAddress, TimeSpan.FromSeconds(10));
return client;
}
は消費者:
public Task Consume(ConsumeContext<IWorklistRequest> context)
{
_log.InfoFormat("Received Worklist Request with Id: {0}", context.RequestId);
try
{
var result = _provider.GetAllWorklistsByStartDate(context.Message.CurrentDateFrom);
IWorklistResponse response = new WorklistResponse
{
ExamItemList = result.ToArray()
};
// the below is sending the response right back to the original queue and is getting picked up again by this same consumer
context.Respond(response);
}
catch (Exception ex)
{
_log.Info(ex.Message);
}
return Task.FromResult(0);
}
実際に私が実装で私を導くために実際に取り組んでいたサンプルです... RabbitMqホストを再作成すれば解決できるかもしれませんが、これはNServiceBusで使用していた既存のものです。 – ragerory
RabbitMQホストを削除して再作成しても問題は解決しません。これは、応答エンドポイントを見つけることができないということです。クライアントとバスの両方が同じマシン上にある場合、これは問題ではありません。 – ragerory
両方のサービスが同じアドレスを使用してRabbitMQに接続していますか?それとも、別のホストアドレスを使用しているのですか?たとえば、ローカルホストを使用し、もう1つはネットワーク名を使用しますか?また、RabbitMQでゲストアカウントをリモートで使用しないでください。 –