首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EasyNetQ主题路由

EasyNetQ主题路由
EN

Stack Overflow用户
提问于 2019-08-08 19:10:41
回答 1查看 799关注 0票数 2

嗨,我有一个问题,我有一个主服务和两个客户端服务,客户端服务可以通过唯一的id来标识,而不是在下水道和客户端之间通信。我使用带有EasyNetQ的RabbitMq,所以我想要的是使用带有某种路由的单个队列,这样客户端就会知道,这不是消息不是给我的,也不会消耗它。我原以为基于主题的路由就行了,但有些地方不对劲,所有的客户端都会轮流接收消息,一个客户端一个客户端另一个客户端。而且我不想使用太多的队列,这些客户端的数量可能会增长。

因此,我的订阅者(客户端服务端)如下所示:

代码语言:javascript
复制
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));

发布者(服务器端)

代码语言:javascript
复制
var topic = $"ProjectId.{projectId}.CabinId.{cabinId}";
bus.PublishAsync(requestService, topic);

那么我能做些什么来做到这一点?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-08 23:33:00

您可以在订阅者(客户端)端解决此问题:调用bus.Advanced.Bind,然后调用bus.Advanced.Consume,而不是使用bus.SubscribeAsyncAdvanced字段的类型为IAdvancedBus,它提供了对更方便的队列通信和配置功能的访问。IAdvancedBus.Bind方法接受路由键并设置订阅者与RabbitMQ通信所需的基本配置,IAdvancedBus.Consume方法实际上开始异步侦听传入的消息。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57411217

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档