현재 MassTransit
에 대해 NServiceBus
을 교환 중이며 요청/응답 패턴에 약간의 어려움이 있습니다.MassTransit 동일한 대기열에 응답하여 루프가 발생합니다.
에서 나는 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와 함께 원격으로 게스트 계정을 사용하지 마십시오. –