2017-02-10 33 views
0

在使用MassTransit和RabbitMQ的請求響應模式中,我試圖創建一個請求客戶端。但這樣做時,一些研究在互聯網上我看到了兩種可能性: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。但是當我嘗試這個時,網址無法識別。這些例子中也從未解釋過。 – Ozkan

+0

更多解釋:我想知道我可以在哪裏配置url的'/ test/request_service'部分。在互聯網上沒有太多有關這方面的文件。 – Ozkan

+0

如果您有兩個服務,並且您從一個到另一個請求,請求客戶端中的地址是應該處理您的請求的服務的地址。這就像'新的Uri(「rabbitmq:// servicebushost/second_service_queue」)' –