CreateRequestClient和CreatePublishRequestClient之间的区别

时间:2017-02-10 09:24:14

标签: rabbitmq message-queue masstransit

在使用MassTransit和RabbitMQ的请求响应模式中,我正在尝试创建请求客户端。但是当在互联网上进行一些研究时,我发现了两种可能性:

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 个答案:

答案 0 :(得分:1)

嗯,这组参数解释了差异。这与我们在SendPublish之间的差异相同。 Publish使用扇出交换,Send仅用于特定交换。

普通RequestClient会在Send下进行,需要接收者地址。

PublishRequestClient不需要任何地址,因为它只会发布消息并希望有人回复。

如果您想了解有关SendPublish差异的更多信息,可以查看blog post