2016-07-24 14 views
0

Ich versuche, einen One Publisher zu vielen Abonnenten Prototyp zu erstellen.Azure Pub/Sub Fast funktioniert

Der Abonnent empfängt die Nachricht zuverlässig; bis ich einen zweiten Abonnenten instanziiere. In diesem Fall wechselt jeder Abonnent beim Empfang des Abonnements eine Abbiegung, und die andere Abonnenteninstanz erhält keine Nachricht. Möchte man sehen, dass jeder Kunde jedes Ticket erhält, wird eine Nachricht veröffentlicht.

Hier ist der Abonnent.

using Microsoft.ServiceBus; 
using Microsoft.ServiceBus.Messaging; 
using System; 
using Microsoft.Azure; // Namespace for CloudConfigurationManager 
using Microsoft.WindowsAzure.Storage; // Namespace for CloudStorageAccount 
using Microsoft.WindowsAzure.Storage.Queue; // Namespace for Queue storage types 
namespace TestReader 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
       CloudConfigurationManager.GetSetting("StorageConnectionString")); 
      string connectionString = 
        CloudConfigurationManager.GetSetting("Microsoft.ServiceBus.ConnectionString"); 
      var namespaceManager = NamespaceManager.CreateFromConnectionString(connectionString); 

      if (!namespaceManager.TopicExists("TestTopic")) 
      { 
       namespaceManager.CreateTopic("TestTopic"); 
      } 
      if (!namespaceManager.SubscriptionExists("TestTopic", "AllMessages")) 
      { 
       namespaceManager.CreateSubscription("TestTopic", "AllMessages"); 
      } 

      ; 
      SubscriptionClient subClient = SubscriptionClient.CreateFromConnectionString 
               (connectionString, "TestTopic", "AllMessages"); 

      subClient.OnMessage(message => 
      { 
       Console.WriteLine(String.Format("Message body: {0}", message.GetBody<String>())); 
       Console.WriteLine(String.Format("Message id: {0}", message.MessageId)); 
      }); 
      Console.WriteLine("Press [Enter] to Exit"); 
      Console.ReadLine(); 
     } 
    } 
} 

Und hier ist der Verlag:

using Microsoft.ServiceBus; 
using Microsoft.ServiceBus.Messaging; 
using System; 
using Microsoft.Azure; // Namespace for CloudConfigurationManager 
using Microsoft.WindowsAzure.Storage; // Namespace for CloudStorageAccount 

namespace TestWriter 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     {   
      CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
        CloudConfigurationManager.GetSetting("StorageConnectionString")); 
      string connectionString = 
        CloudConfigurationManager.GetSetting("Microsoft.ServiceBus.ConnectionString"); 
      var namespaceManager = NamespaceManager.CreateFromConnectionString(connectionString); 
      if (!namespaceManager.TopicExists("TestTopic")) 
      { 
       namespaceManager.CreateTopic("TestTopic"); 
      } 

      TopicClient topicClient = 
       TopicClient.CreateFromConnectionString(connectionString, "TestTopic"); 
      SubscriptionClient subClient = SubscriptionClient.CreateFromConnectionString 
      (connectionString, "TestTopic", "AvailableMsgs"); 

      Console.WriteLine("Please press 'S' to send 'X' to Exit"); 
      char s = 'S'; 
      do 
      { 
       s = Console.ReadKey().KeyChar; 
       if (s == 'S') 
       { 
        var message = new BrokeredMessage("This is a test message!"); 
        topicClient.Send(message); 
        Console.WriteLine("==>Sent"); 
       } 
      } while (s == 'S'); 
     } 
    } 
} 

Antwort

0

Sie müssen mehrere Abonnements haben, eine für jeden Verbraucher. Ein einzelnes Abonnement verhält sich wie eine Warteschlange und erlaubt nur einem Kunden, jede Nachricht zu empfangen.