首页 文章

Azure Servicebus多个未知的消费者

提问于
浏览
0

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

每个订阅者应该只收到一次消息,并将消息标记为完成/放弃,但仅限于自己 . 该消息将保留在其他订户的队列中 .

阅读文档表明我需要创建一个主题,然后创建多个订阅 . 但是,由于建筑原因 . 我无法事先说明订户将会是什么 . 我希望新订阅者可以开始使用消息而不必更改我的队列配置 .

azure servicebus可以处理这种情况吗?此外,一些订户将使用其余客户端而不是.net客户端 .

谢谢

1 回答

  • 1

    不一定是对此的完整答案,但是是的,可以使Service Bus以这种方式工作,从而使您保持在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/

    但是,您不包含有关您的应用程序的任何信息以及客户端的性质,并且可能有许多原因导致这不是一个明智的解决方案 . 包含

    客户端需要知道订阅安全密钥 .
    未协调的客户端必须创建唯一的订阅名称 .
    客户端可以在完成订阅后删除订阅但您是否能够确保订阅?
    根据配置,许多不活动的客户端可能会导致您的主题达到其配额限制并停止接受新邮件 .
    ......可能还有很多

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

相关问题