Azure Servicebus多个未知消费者

本文关键字:未知 消费者 Servicebus Azure | 更新日期: 2023-09-27 18:14:20

我需要创建一个队列,多个未知订阅者可以从中获取消息。

每个订阅者只应接收每条消息一次,并将消息标记为完成/放弃,但仅供自己使用。此消息将保留在其他订阅者的队列中。

阅读文档建议我需要创建一个主题,然后多个订阅。但是,由于体系结构的原因。我不能提前指定订阅者是谁。我希望新的订阅者可以开始消费消息,而不必更改我的队列配置。

azure servicebus能处理这个场景吗?此外,一些订阅者将使用rest客户端,而不是。net客户端。

谢谢

Azure Servicebus多个未知消费者

不一定是这个问题的完整答案,但是如果您保持在Azure服务配额限制内,可以使服务总线以这种方式工作。

客户端可以创建自己的订阅

string connectionString = CloudConfigurationManager.GetSetting("ServiceBus.ConnectionString");
// Note issue of how you secure this if necessary
var namespaceManager = NamespaceManager.CreateFromConnectionString(connectionString);
if (!namespaceManager.SubscriptionExists(TOPIC_NAME, SUBSCRIPTION_NAME))
{
    //var messagesFilter = new SqlFilter("you can add a client filter for the subscription");
    SubscriptionDescription sd = new SubscriptionDescription(TOPIC_NAME, SUBSCRIPTION_NAME)
    {
        // configure settings or accept the defaults
        DefaultMessageTimeToLive = TimeSpan.FromDays(14),
        EnableDeadLetteringOnMessageExpiration = true,
        MaxDeliveryCount = 1000,
        LockDuration = TimeSpan.FromMinutes(3)
    };
    namespaceManager.CreateSubscription(sd);
    // or namespaceManager.CreateSubscription(sd, messagesFilter);
}
// subscription client for the new topic
_subscriptionClient = SubscriptionClient.CreateFromConnectionString(connectionString, TOPIC_NAME, SUBSCRIPTION_NAME, ReceiveMode.PeekLock);

在Rest api中有一个等效的https://msdn.microsoft.com/en-us/library/azure/hh780748.aspx

一旦订阅被创建,客户端将能够接收从那时起发送到主题的任何消息的自己的副本。

您没有说明有多少客户机,但您需要保持在服务总线服务限制内https://azure.microsoft.com/en-us/documentation/articles/service-bus-quotas/

但是,您没有包含任何关于您的应用程序和客户端性质的信息,并且可能有很多原因表明这不是一个可取的解决方案。包括

客户端需要知道订阅安全密钥。
不协调的客户端必须创建唯一的订阅名。
客户端可以在使用完订阅后删除订阅,但是您能够确保这样做吗?
根据配置,非活动客户端数量可能导致主题达到其配额限制并停止接受新消息。
…可能还有更多

如果客户不在你的控制之下,我想说这绝对不是正确的解决方案。