2017-02-10 8 views
0

RabbitMQ와 함께 MassTransit을 사용하는 요청 응답 패턴에서 요청 클라이언트를 만들려고합니다. 인터넷에서 몇 가지 조사를하고 난 두 가지 가능성보고 때 :CreateRequestClient와 CreatePublishRequestClient의 차이점

CreateRequestClient 및 CreatePublishRequestClient

누군가는 그 두와 사용시기의 차이는 무엇을 알고 있나요?

는 방법은 아래를 참조 :

public static class RequestClientExtensions 
    { 
    public static IRequestClient<TRequest, TResponse> CreateRequestClient<TRequest, TResponse>(this IBus bus, Uri address, TimeSpan timeout, TimeSpan? ttl = null, Action<SendContext<TRequest>> callback = null) where TRequest : class where TResponse : class 
    { 
     return (IRequestClient<TRequest, TResponse>) new MessageRequestClient<TRequest, TResponse>(bus, address, timeout, ttl, callback); 
    } 

    public static IRequestClient<TRequest, TResponse> CreatePublishRequestClient<TRequest, TResponse>(this IBus bus, TimeSpan timeout, TimeSpan? ttl = null, Action<SendContext<TRequest>> callback = null) where TRequest : class where TResponse : class 
    { 
     return (IRequestClient<TRequest, TResponse>) new PublishRequestClient<TRequest, TResponse>(bus, timeout, ttl, callback); 
    } 
    } 

답변

1

글쎄, 인수의 집합의 차이를 설명한다. 이는 SendPublish 사이의 차이와 같습니다. Publish은 팬 아웃 교환을 사용하고 Send은 특정 교환 전용으로 배달합니다.

보통 RequestClient은 후드 아래 Send 일 수 있으며 수신자 주소가 필요합니다.

PublishRequestClient 메시지를 게시하기 만하면 누군가가 답장을 보내기 때문에 주소가 필요하지 않습니다.

SendPublish의 차이점을 알고 싶다면 blog post을 확인할 수 있습니다.

+0

이 놀라운 답장을 보내 주셔서 감사합니다. 내가 주소로 전달해야 할 것도 알고 있습니까? 일부 예에서는 rabbitmq : // localhost/test/request_service가 표시됩니다. 그러나 이것을 시도 할 때 URL은 인식되지 않습니다. 또한 예제에서는 절대로 설명하지 않습니다. – Ozkan

+0

더 많은 설명 : 나는 어디에 '/ 테스트/request_service'URL의 부분을 구성 할 수 있는지 알고 싶다. 이것에 대한 많은 문서가 인터넷에 없습니다. – Ozkan

+0

두 개의 서비스가 있고 하나씩 요청하는 경우 요청 클라이언트의 주소는 요청을 처리해야하는 서비스의 주소입니다. '새 Uri ("rabbitmq : // servicebushost/second_service_queue")와 같습니다. –