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);
}
}
好吧,这组参数解释了差异。这与 Send
和 Publish
之间的差异相同。 Publish
使用 fan-out 交易所,Send
仅交付给特定交易所。
正常 RequestClient
将在后台执行 Send
并且需要接收方地址。
PublishRequestClient
不需要任何地址,因为它只会发布消息并希望有人回复它。
如果您想了解更多关于 Send
与 Publish
的区别,您可以查看此 blog post。
在将 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);
}
}
好吧,这组参数解释了差异。这与 Send
和 Publish
之间的差异相同。 Publish
使用 fan-out 交易所,Send
仅交付给特定交易所。
正常 RequestClient
将在后台执行 Send
并且需要接收方地址。
PublishRequestClient
不需要任何地址,因为它只会发布消息并希望有人回复它。
如果您想了解更多关于 Send
与 Publish
的区别,您可以查看此 blog post。