0
我刚开始玩着天蓝色和服务总线。我试图能够将相同的消息发送给多个客户端。在其他消息传递解决方案中,如果您有多个客户端正在监听某个主题,并且您将消息发送给某个主题,则他们都会收到该消息使用Azure,只有一个订阅者可以获取该消息。我相信我错过了任何人都可以提供一个指针?我的示例代码如下。如何向多个客户端发送相同的消息
string connectionString =
"Endpoint=sb://xxx.servicebus.windows.net/;SharedSecretIssuer=owner;SharedSecretValue=xxxxxxxxxxxxxxxxxxxxxxxxxxxx=";
NamespaceManager namespaceManager = NamespaceManager.CreateFromConnectionString(connectionString);
string topic = TestTopic.Replace("/", ".").Replace("{", "-").Replace("}", "-");
if (!namespaceManager.TopicExists(topic))
{
var td = new TopicDescription(topic)
{
MaxSizeInMegabytes = 5120,
DefaultMessageTimeToLive = new TimeSpan(0, 1, 0),
};
namespaceManager.CreateTopic(td);
}
var message = new {CurrencyCode = "AUD", EffectiveDate = DateTime.Today, Rate = .97M};
TopicClient publisher = TopicClient.CreateFromConnectionString(connectionString, topic);
var bm = new BrokeredMessage("fff");
bm.Properties["Topic"] = ".xxx.fxrates.aud";
int messagesReceived = 0;
int messagesReceived2 = 0;
if (namespaceManager.SubscriptionExists(topic, "test") == false)
{
SubscriptionDescription sub = namespaceManager.CreateSubscription(topic, "test");
}
SubscriptionClient subscriber = SubscriptionClient.CreateFromConnectionString(connectionString, topic,
"test",
ReceiveMode.ReceiveAndDelete);
SubscriptionClient subscriber2 = SubscriptionClient.CreateFromConnectionString(connectionString, topic,
"test",
ReceiveMode.ReceiveAndDelete);
subscriber.OnMessage(delegate { messagesReceived++; });
subscriber2.OnMessage(delegate { messagesReceived2++; });
publisher.Send(bm);
namespaceManager.DeleteTopic(topic);
每个订阅者都有自己的队列,因此每个订阅者是否执行PeekLock或ReceiveAndDelete并不重要,其他订阅者将收到是否有另一个订阅(队列)已经阅读消息的消息。 –