CreateRequestClient 和 CreatePublishRequestClient 的区别

Difference between CreateRequestClient and CreatePublishRequestClient

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

好吧,这组参数解释了差异。这与 SendPublish 之间的差异相同。 Publish 使用 fan-out 交易所,Send 仅交付给特定交易所。

正常 RequestClient 将在后台执行 Send 并且需要接收方地址。

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

如果您想了解更多关于 SendPublish 的区别,您可以查看此 blog post