Azure Service Busを使用して、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つのインスタンスのみがメッセージを取得してサブスクリプションから削除していました。