在使用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);
}
}
答案 0 :(得分:1)
嗯,这组参数解释了差异。这与我们在Send
和Publish
之间的差异相同。 Publish
使用扇出交换,Send
仅用于特定交换。
普通RequestClient
会在Send
下进行,需要接收者地址。
PublishRequestClient
不需要任何地址,因为它只会发布消息并希望有人回复。
如果您想了解有关Send
与Publish
差异的更多信息,可以查看blog post。