Je n'entrerai pas dans les détails sur ce qu'est RabbitMQ et comment l'installer. Baidu vous en parlera, mais vous devez faire plus attention à la configuration.
Sans plus tarder, commençons par un exemple de code simple
Expéditeur :
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); } } }
Destinataire :
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)); } } } }
Envoyez mille envois un à la fois, le processus d'envoi est rapide et il est relativement lent lors de la réception.
Il suffit d'y mettre fin.
🎜> Vous pouvez voir que lorsque deux récepteurs fonctionnent en même temps, RabbitMQ distribue chaque message de manière séquentielle. Lorsque chaque confirmation est reçue, le message est supprimé et le suivant est distribué au destinataire suivant, principalement grâce au mécanisme dedistribution cyclique de RabbitMQ.
Comme brièvement mentionné ci-dessus, lorsqu'il y a plusieurs récepteurs, en raison de la distribution circulaire, le message est presque partagé entre les deux récepteurs.
Alors comment diffuser le même message à plusieurs destinataires. <发> Modifiez le code de fin d'envoi :
Par rapport à la méthode ci-dessus, vous constaterez qu'il y a deux sections de code après l'annotation du code après utilisation. En mode Fanout, il n'est pas nécessaire de spécifier le nom de la file d'attente. Une pause d'une seconde a pour but de faciliter la visualisation des résultats et d'éviter un rafraîchissement trop rapide. Jetons un coup d'œil au code du récepteur :
Lorsqu'un nouveau récepteur Lors de la connexion (consommateur), un nouveau doit être déclaré File d'attente, commentaire 1 code, RabbitMQ en générera automatiquement un si vous ne spécifiez pas de nom lors de la déclaration d'une file d'attente, ce qui est bien.
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()); } } }
Quant aux inconvénients de la méthode de diffusion, vous le saurez après l'avoir exécutée vous-même
.Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!