2017-02-10 1 views
0

In einem Request Response-Muster mit MassTransit mit RabbitMQ versuche ich einen Request-Client zu erstellen. Aber wenn im Internet einige der Forschung sah ich zwei Möglichkeiten:Unterschied zwischen CreateRequestClient und CreatePublishRequestClient

CreateRequestClient und CreatePublishRequestClient

Kennt jemand was ist der Unterschied zwischen den beiden, und wenn sie zu benutzen?

siehe unten für die Methoden:

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); 
    } 
    } 

Antwort

1

die Menge der Argumente den Unterschied Nun, erklären. Dies ist der gleiche Unterschied wie zwischen Send und Publish. Publish verwendet Fan-Out-Austausch und Send liefert nur zu einem bestimmten Austausch.

Normal RequestClient tun Send unter der Haube und braucht die Empfängeradresse.

PublishRequestClient benötigt keine Adresse, da es nur die Nachricht veröffentlicht und hoffen, dass jemand darauf antworten wird. Wenn Sie mehr über Send vs Publish Unterschied wissen möchten, können Sie dies überprüfen blog post.

+0

Vielen Dank für diese erstaunliche Antwort. Weißt du auch, was ich als Adresse weitergeben muss? In einigen Beispielen sehe ich rabbitmq: // localhost/test/request_service. Aber wenn ich das versuche, wird die URL nicht erkannt. Es wird auch nie in den Beispielen erklärt. – Ozkan

+0

Noch eine Erklärung: Ich möchte wissen, wo ich den '/ test/request_service' Teil der URL konfigurieren kann. Es gibt nicht viel Dokumentation darüber im Internet. – Ozkan

+0

Wenn Sie zwei Dienste haben und von einem zum anderen fragen, ist die Adresse im Anfrage-Client die Adresse des Dienstes, der Ihre Anfrage bearbeiten soll. Es ist wie 'new Uri (" rabbitmq: // servicebushost/second_service_queue ")' –