Ich werde nicht näher darauf eingehen, was RabbitMQ ist und wie man es installiert. Baidu wird Ihnen mehr darüber erzählen, aber Sie müssen der Konfiguration mehr Aufmerksamkeit schenken.
Beginnen wir ohne weitere Umschweife mit einem einfachen Beispielcode
Absender:
ConnectionFactory factory = new ConnectionFactory { HostName = "hostname", UserName = "root", Password = "root001", VirtualHost = "hostserver" }; using (IConnection conn = factory.CreateConnection()) { using (IModel im = conn.CreateModel()) { im.ExchangeDeclare("rabbitmq_route", ExchangeType.Direct); im.QueueDeclare("rabbitmq_query", false, false, false, null); im.QueueBind("rabbitmq_query", "rabbitmq_route", ExchangeType.Direct, null); for (int i = 0; i < 1000; i++) { byte[] message = Encoding.UTF8.GetBytes("Hello Lv"); im.BasicPublish("rabbitmq_route", ExchangeType.Direct, null, message); Console.WriteLine("send:" + i); } } }
Empfänger:
ConnectionFactory factory = new ConnectionFactory { HostName = "hostname", UserName = "root", Password = "root001", VirtualHost = "hostserver" }; using (IConnection conn = factory.CreateConnection()) { using (IModel im = conn.CreateModel()) { while (true) { BasicGetResult res = im.BasicGet("rabbitmq_query", true); if (res != null) { Console.WriteLine("receiver:"+UTF8Encoding.UTF8.GetString(res.Body)); } } } }
Senden Sie tausend nacheinander, der Sendevorgang ist schnell und der Empfang relativ langsam.
Beenden Sie es einfach.
🎜> Sie können sehen, dass RabbitMQ jede Nachricht nacheinander verteilt, wenn zwei Empfänger gleichzeitig ausgeführt werden. Wenn jede Bestätigung empfangen wird, wird die Nachricht gelöscht und die nächste an den nächsten Empfänger verteilt, hauptsächlich aufgrund deszyklischen Verteilungsmechanismus von RabbitMQ.
Wie oben kurz erwähnt, wird die Nachricht bei mehreren Empfängern aufgrund der zirkulären Verteilung fast zwischen den beiden Empfängern aufgeteilt.
So verteilen Sie dieselbe Nachricht an mehrere Empfänger. <发> Ändern Sie den Sendeendcode:
Im Vergleich zur obigen Methode werden Sie feststellen, dass nach der Codeanmerkung zwei Codeabschnitte vorhanden sind Im Fanout-Modus muss der Warteschlangenname nicht angegeben werden. Der Zweck der Pause von einer Sekunde besteht darin, die Anzeige der Ergebnisse zu erleichtern und eine zu schnelle Aktualisierung zu vermeiden. Schauen wir uns den Empfängercode an:
Wenn ein neuer Empfänger angeschlossen wird (Verbraucher), muss ein neuer deklariert werden Warteschlange, Kommentar 1-Code: Wenn RabbitMQ eine Warteschlange deklariert, wird automatisch eine generiert, wenn Sie keinen Namen angeben, was gut ist.
ConnectionFactory factory = new ConnectionFactory { HostName = "hostname", UserName = "root", Password = "root001", VirtualHost = "host" }; using (IConnection conn = factory.CreateConnection()) { using (IModel im = conn.CreateModel()) { im.ExchangeDeclare("rabbitmq_route_Fanout", ExchangeType.Fanout);// 路由 int i = 0; while (true) { Thread.Sleep(1000); ++i; byte[] message = Encoding.UTF8.GetBytes(i.ToString()); im.BasicPublish("rabbitmq_route_Fanout", "", null, message); Console.WriteLine("send:" + i.ToString()); } } }
Was die Nachteile der Broadcast-Methode betrifft, erfahren Sie, nachdem Sie sie selbst ausgeführt haben.
Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung des Grafikcodes für die RabbitMQ-Anwendung in C#. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!