Azure 服务总线广播到所有辅助角色实例

Posted

技术标签:

【中文标题】Azure 服务总线广播到所有辅助角色实例【英文标题】:Azure Service Bus broadcast to all worker role instances 【发布时间】:2013-02-28 08:21:23 【问题描述】:

我正在尝试使用 Azure 服务总线将消息从 Web 角色广播到单个辅助角色的所有实例。这是我用来接收消息的代码:

// Create the topic if it does not exist already
            string connectionString = CloudConfigurationManager.GetSetting("Microsoft.ServiceBus.ConnectionString");
        var namespaceManager = NamespaceManager.CreateFromConnectionString(connectionString);

        // Configure Topic Settings
        TopicDescription td = new TopicDescription("CommandTopic");
        td.MaxSizeInMegabytes = 5120;
        td.DefaultMessageTimeToLive = new TimeSpan(0, 0, 1);

        if (!namespaceManager.TopicExists("CommandTopic"))
        
            namespaceManager.CreateTopic(td);
        

        Random rand = new Random();
        double randNum = rand.Next();

        if (!namespaceManager.SubscriptionExists("CommandTopic", "CommandSubscription"+randNum))
        
            namespaceManager.CreateSubscription("CommandTopic", "CommandSubscription" + randNum);
        

        Client = SubscriptionClient.CreateFromConnectionString(connectionString, "CommandTopic", "CommandSubscription" + randNum, ReceiveMode.ReceiveAndDelete);
        Trace.WriteLine("SUBSCRIPTION: COMMANDSUBSCRIPTION"+randNum);

为了为每个工作角色实例创建一个单独的订阅(以便所有实例都收到主题中的消息),我不得不使用一个随机数。有没有办法使用实例的一些 Id 而不是随机数。有 Instance.Id 但它太长而不能用作订阅名称的参数。是否有不使用子字符串的较短版本?另外,为每个实例创建单独的订阅是正确的方法吗?以前所有实例都订阅了同一个订阅,因此只有 1 个实例获取消息并将其从订阅中删除。

【问题讨论】:

【参考方案1】:

尝试将工作人员角色的虚假 InternalEndpoint 添加到您的配置中。这可确保填充角色的实例列表。

【讨论】:

我想你误解了我一点,当我说不同的订阅时,我并不是指不同的 Azure 订阅,而是对主题 windowsazure.com/en-us/develop/net/how-to-guides/… 的订阅。虽然 internalEndpoint 提示有效,但实例列表已正确填充:)【参考方案2】:

请找到以下链接,希望它可以帮助您进行角色之间的互通:

http://msdn.microsoft.com/en-us/library/windowsazure/hh180158.aspx

还请查看以下链接,我认为它正是您正在寻找的: http://windowsazurecat.com/2011/08/how-to-simplify-scale-inter-role-communication-using-windows-azure-service-bus/

我认为您正在谈论的内容类似于以下链接中的场景 4,其中一个角色可以与其他几个角色进行通信。我不确定您要求的内容是否可行,但请尝试使用带有服务总线队列的 Windows Azure Worker Role,我认为这可能对您有很大帮助,并且在这种情况下也可能是比主题和订阅更好的解决方案。

【讨论】:

以上是关于Azure 服务总线广播到所有辅助角色实例的主要内容,如果未能解决你的问题,请参考以下文章

Windows Azure 服务总线 - 一般问题

Azure 服务总线 - 删除特定消息

SpringCloudSpring Cloud Bus 服务总线(二十二)

Azure 服务总线队列性能

顺序处理算法/模式 - Azure 服务总线队列

Azure 服务总线 http 与 websocket