gpt4 book ai didi

c# - 锁定服务总线队列并防止其他人访问它

转载 作者:行者123 更新时间:2023-11-30 16:49:26 26 4
gpt4 key购买 nike

我有多个队列,多个客户端向其中插入消息。

在服务器端,我有多个微服务可以访问队列并处理这些消息。我想在服务正在处理队列时锁定队列,以便其他服务无法处理该队列。

这意味着如果服务 A 正在处理来自队列 X 的消息,则在服务 A 完成消息处理之前,其他服务无法处理来自该队列的消息。其他服务可以处理来自除 X 之外的任何队列的消息。

有没有人知道如何锁定队列并防止其他人访问它?最好是其他服务会收到异常或其他内容,以便它们会在不同的队列上重试。

更新

另一种方法是将队列分配给服务,只要服务正在队列上工作,就不应将其他服务分配给队列,直到处理完工作项。这也是不容易做到的。

最佳答案

有几种内置的方法可以做到这一点。如果你只有一个 worker ,你可以设置 MessageOptions.MaxConcurrentCalls = 1

如果你有多个,你可以使用Singleton属性。这使您可以选择将其设置为监听器模式或功能模式。前者提供您要求的行为,一个串行处理的 FIFO 队列。后者让您可以更细粒度地锁定,因此您可以专门锁定关键部分,确保一致性,同时允许更高的吞吐量,但不一定保持顺序

我猜他们会以类似于您的 Redis 方法的方式实现单例属性,因此性能应该是等效的。不过我没有对此进行任何测试。

关于c# - 锁定服务总线队列并防止其他人访问它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36705199/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com