我們目前正在爲MassTransit
轉換NServiceBus
,我在請求/響應模式中遇到了一些困難。MassTransit響應進入同一隊列並導致循環
在NServiceBus
,我可以在Handler
做回覆,並回到發送它的客戶端。
在MassTransit
,看起來好像響應被送回,它是從,從而創建一個循環消耗的隊列......
奇怪的事情,如果我創建使用InMemory總線,和客戶端和客戶端在同一臺機器上,我沒有問題。
我期待我的客戶搭上了迴應,而是我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?或者是其中一個使用不同的主機地址?例如,一個使用本地主機,另一個使用網絡名稱?此外,請勿使用RabbitMQ遠程訪客帳戶。 –