2017-02-10 3 views
0

RabbitMQでMassTransitを使用したリクエストレスポンスパターンで、リクエストクライアントを作成しようとしています。私は2つの可能性を見たインターネット上でいくつかの研究行っているときしかし:CreateRequestClientとCreatePublishRequestClientの違い

CreateRequestClientとCreatePublishRequestClient

を誰かがそれらの2とするときにそれらを使用する方法との違い何を知っていますか?

は、方法については、以下を参照してください。

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

もう少し説明:私はどこに '/ test/request_service'のURLの部分を設定できるか知りたいです。これについては、インターネット上の多くの文書はありません。 – Ozkan

+0

2つのサービスがあり、それぞれに依頼する場合、要求クライアントのアドレスは、要求を処理するサービスのアドレスです。これは '新しいUri(" rabbitmq:// servicebushost/second_service_queue ")のようなものです –