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

本文关键字:角色 实例 服务 总线 广播 Azure | 更新日期: 2023-09-27 18:03:27

我正在尝试使用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而不是随机数。有实例。Id,但它太长,不能用作订阅名称的参数。有没有不使用子字符串的更短的版本?另外,为每个实例创建单独的订阅是正确的方法吗?在此之前,所有实例都订阅相同的订阅,因此只有1个实例获取消息并将其从订阅中删除。

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

尝试在配置中为worker角色添加一个伪造的InternalEndpoint。这将确保填充角色的实例列表。

请看下面的链接,希望能对你们角色之间的沟通有所帮助:

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角色与服务总线队列一起工作,我认为这可能会对你有很大帮助,在这种情况下也可能是比主题和订阅更好的解决方案。