C# 使用Azure服务总线、竞争消费者和多租户的Rebus
我一直在尝试为Azure Service Bus设置REBS,但我发现很难找到适合我的用例的示例,或者自己构建解决方案 我有多个实例生成C# 使用Azure服务总线、竞争消费者和多租户的Rebus,c#,azureservicebus,azure-servicebus-queues,rebus,C#,Azureservicebus,Azure Servicebus Queues,Rebus,我一直在尝试为Azure Service Bus设置REBS,但我发现很难找到适合我的用例的示例,或者自己构建解决方案 我有多个实例生成Message1,每个实例为特定的客户端运行,但是它们都生成message类Message1的实例。这些信息需要发送给ASB。接下来,每个租户都有很多相互竞争的消费者。换句话说,对于每个租户,Message1有多个使用者,但只有一个使用者可以处理此消息。这使我能够并行计算繁重的工作 通常情况下,我会为每个客户在ASB中创建一个队列,从而保证来自不同客户的消息不会
Message1
,每个实例为特定的客户端运行,但是它们都生成message类Message1
的实例。这些信息需要发送给ASB。接下来,每个租户都有很多相互竞争的消费者。换句话说,对于每个租户,Message1
有多个使用者,但只有一个使用者可以处理此消息。这使我能够并行计算繁重的工作
通常情况下,我会为每个客户在ASB中创建一个队列,从而保证来自不同客户的消息不会被混淆,也不会被执行多次。但是,Rebus会创建主题,从而启用多个订阅。就我的理解而言,这意味着所有订阅者都将收到这些消息(因此导致重复)。当然,人们可以过滤这些信息。但我没有找到任何明确的例子。而且这感觉有点不安全;我要强调的是,这些每个租户的数据流需要分开
到目前为止,我一直在努力:
- 为每个租户创建单独的主题
- 为每个租户创建单独的(错误)队列,但是,我不确定Rebus如何使用这些队列,因为消息是在主题上发布的
总之,我的问题是:如何设置一个场景,使同一条消息不能被传递两次,同时确保来自一个租户的消息只由为该租户工作的消费者处理。对于Rebus,基本上有两种路由消息的方法:
等待总线。发送(消息)
等待总线。发布(消息)
Configure.With(…)
.传输(t=>。。。
.Routing(r=>r.typebase().Map(“某些队列”))
.Start();
将使您能够执行以下操作:
wait bus.Send(new SomeMessage());
然后消息将直接发送到队列“some queue”
在我看来,您并不想为每个租户创建主题——它们不能用于实现“竞争消费者”,因为主题的目的是将每条消息的单独副本分发给每个订阅者
队列用于按您想要的方式分发工作–您只需确保每个消息都发送到正确的队列
如果您想阅读更多内容,请查看。完美!看起来我犯了一个小错误,但这确实扩大了我的理解,谢谢。我将很快构造示例代码,希望它有用