EasyNetQ 主题路由
EasyNetQ Topic Routing
你好我有一个问题我有一个主服务和两个客户端服务,客户端服务可以通过唯一的 id 来识别,而不是在下水道和客户端之间进行通信我使用 RabbitMq 和 EasyNetQ,所以我想要的是使用单一使用某种路由排队,这样客户端就会知道,这不是消息,不适合我,也不要使用它。我认为基于主题的路由可以,但出了点问题,所有客户端交替接收消息,一次是一个客户端。而且我不想使用很多队列,并且这些客户端的数量会增加。
所以我的订户(客户端服务端)看起来像:
var topic = $"ProjectId.{ProjectId}.CabinId.{CabinId}";
var responseHandler = new Func<ManualServiceRequestMessage, Task>
(response => Task.Factory.StartNew(() =>
{
Console.WriteLine($"!!!!!!!!! {topic} !!!!!!!!!!");
Console.WriteLine($"Response pid {response.ProjectId} cid {response.CabinId}");
})
.ContinueWith(task =>
{
if (!task.IsCompleted && task.IsFaulted)
{
Console.WriteLine($"Message receive problem {response.ProjectId} frame type {response.CabinId} response id {response.RequestHash}");
}
}));
bus.SubscribeAsync<ManualServiceRequestMessage>("LiveServer.ManualRequestQueue", responseHandler, x => x.WithTopic(topic));
发布者(服务器端)
var topic = $"ProjectId.{projectId}.CabinId.{cabinId}";
bus.PublishAsync(requestService, topic);
那么我能做些什么吗?
您可以在订户(客户端)端解决此问题:不使用 bus.SubscribeAsync
,而是调用 bus.Advanced.Bind
,然后调用 bus.Advanced.Consume
。
Advanced
字段的类型为 IAdvancedBus
并提供对更方便的队列通信和配置功能的访问。 IAdvancedBus.Bind
方法接受路由键并设置订阅者与 RabbitMQ 通信所需的基本配置,IAdvancedBus.Consume
方法实际上开始异步侦听传入消息。
你好我有一个问题我有一个主服务和两个客户端服务,客户端服务可以通过唯一的 id 来识别,而不是在下水道和客户端之间进行通信我使用 RabbitMq 和 EasyNetQ,所以我想要的是使用单一使用某种路由排队,这样客户端就会知道,这不是消息,不适合我,也不要使用它。我认为基于主题的路由可以,但出了点问题,所有客户端交替接收消息,一次是一个客户端。而且我不想使用很多队列,并且这些客户端的数量会增加。
所以我的订户(客户端服务端)看起来像:
var topic = $"ProjectId.{ProjectId}.CabinId.{CabinId}";
var responseHandler = new Func<ManualServiceRequestMessage, Task>
(response => Task.Factory.StartNew(() =>
{
Console.WriteLine($"!!!!!!!!! {topic} !!!!!!!!!!");
Console.WriteLine($"Response pid {response.ProjectId} cid {response.CabinId}");
})
.ContinueWith(task =>
{
if (!task.IsCompleted && task.IsFaulted)
{
Console.WriteLine($"Message receive problem {response.ProjectId} frame type {response.CabinId} response id {response.RequestHash}");
}
}));
bus.SubscribeAsync<ManualServiceRequestMessage>("LiveServer.ManualRequestQueue", responseHandler, x => x.WithTopic(topic));
发布者(服务器端)
var topic = $"ProjectId.{projectId}.CabinId.{cabinId}";
bus.PublishAsync(requestService, topic);
那么我能做些什么吗?
您可以在订户(客户端)端解决此问题:不使用 bus.SubscribeAsync
,而是调用 bus.Advanced.Bind
,然后调用 bus.Advanced.Consume
。
Advanced
字段的类型为 IAdvancedBus
并提供对更方便的队列通信和配置功能的访问。 IAdvancedBus.Bind
方法接受路由键并设置订阅者与 RabbitMQ 通信所需的基本配置,IAdvancedBus.Consume
方法实际上开始异步侦听传入消息。