RabbitMQ与.net core(五) topic类型 与 headers类型 的Exchange
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了RabbitMQ与.net core(五) topic类型 与 headers类型 的Exchange,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含5225字,纯文字阅读大概需要8分钟。
内容图文
![RabbitMQ与.net core(五) topic类型 与 headers类型 的Exchange](/upload/InfoBanner/zyjiaocheng/1114/8536fafde2ab495a84250027b296a265.jpg)
1.topic类型的Exchange
我们之前说过Topic类型的Exchange是direct类型的模糊查询模式,可以通过routkey来实现模糊消费message,topic的模糊匹配有两种模式:
1. 使用*来匹配一个单词
2.使用#来匹配0个或多个单词
我们来看代码
消费端
using RabbitMQ.Client; using RabbitMQ.Client.Events; using System; using System.Collections.Generic; using System.Text; using System.Threading; namespace RabbitMQClient { class Program { private static readonly ConnectionFactory rabbitMqFactory = new ConnectionFactory() { HostName = "39.**.**.**", Port = 5672, UserName = "root", Password = "root", VirtualHost = "/" }; staticvoid Main(string[] args) { var exchangeAll = "changeAll"; var queueman = "queueman"; var quemankey = "man.#"; using (IConnection conn = rabbitMqFactory.CreateConnection()) using (IModel channel = conn.CreateModel()) { channel.ExchangeDeclare(exchangeAll, type: "topic", durable: true, autoDelete: false); channel.QueueDeclare(queueman, durable: true, exclusive: false, autoDelete: false); channel.QueueBind(queueman, exchangeAll, quemankey); channel.BasicQos(prefetchSize: 0, prefetchCount: 50, global: false); EventingBasicConsumer consumer = new EventingBasicConsumer(channel); consumer.Received += (model, ea) => { Byte[] body = ea.Body; String message = Encoding.UTF8.GetString(body); Console.WriteLine( message); channel.BasicAck(deliveryTag: ea.DeliveryTag, multiple: false); }; channel.BasicConsume(queue: queueman, autoAck: false, consumer: consumer); Console.ReadLine(); } } } }
生产者代码
using RabbitMQ.Client; using System; using System.Collections.Generic; using System.Text; using System.Threading; using System.Threading.Tasks; namespace RabbitMQConsole { class Program { static void Main(string[] args) { ConnectionFactory factory = new ConnectionFactory(); factory.HostName = "39.**.**.**"; factory.Port = 5672; factory.VirtualHost = "/"; factory.UserName = "root"; factory.Password = "root"; var exchangeAll = "changeAll"; //性别.姓氏.头发长度var keymanA = "man.chen.long"; var keymanB = "man.liu.long"; var keymanC = "woman.liu.long"; var keymanD = "woman.chen.short"; using (var connection = factory.CreateConnection()) { using (var channel = connection.CreateModel()) { channel.ExchangeDeclare(exchangeAll, type: "topic", durable: true, autoDelete: false); var properties = channel.CreateBasicProperties(); properties.Persistent = true; //发布消息 channel.BasicPublish(exchange: exchangeAll, routingKey: keymanA, basicProperties: properties, body: Encoding.UTF8.GetBytes(keymanA)); channel.BasicPublish(exchange: exchangeAll, routingKey: keymanB, basicProperties: properties, body: Encoding.UTF8.GetBytes(keymanB)); channel.BasicPublish(exchange: exchangeAll, routingKey: keymanC, basicProperties: properties, body: Encoding.UTF8.GetBytes(keymanC)); channel.BasicPublish(exchange: exchangeAll, routingKey: keymanD, basicProperties: properties, body: Encoding.UTF8.GetBytes(keymanD)); } } } } }
我们先运行消费端再运行生产段,结果如下
消费端:
2.headers类型的exchange
生成者代码
using RabbitMQ.Client; using System; using System.Collections.Generic; using System.Text; using System.Threading; using System.Threading.Tasks; namespace RabbitMQConsole { class Program { static void Main(string[] args) { ConnectionFactory factory = new ConnectionFactory(); factory.HostName = "39.**.**.**"; factory.Port = 5672; factory.VirtualHost = "/"; factory.UserName = "root"; factory.Password = "root"; var exchangeAll = "changeHeader"; using (var connection = factory.CreateConnection()) { using (var channel = connection.CreateModel()) { channel.ExchangeDeclare(exchangeAll, type: "headers", durable: true, autoDelete: false); var properties = channel.CreateBasicProperties(); properties.Persistent = true; properties.Headers = new Dictionary<string, object> { { "sex","man"} }; //发布消息 channel.BasicPublish(exchange: exchangeAll, routingKey: "", basicProperties: properties, body: Encoding.UTF8.GetBytes("hihihi")); } } } } }
消费端代码
using RabbitMQ.Client; using RabbitMQ.Client.Events; using System; using System.Collections.Generic; using System.Text; using System.Threading; namespace RabbitMQClient { class Program { private static readonly ConnectionFactory rabbitMqFactory = new ConnectionFactory() { HostName = "39.**.**.**", Port = 5672, UserName = "root", Password = "root", VirtualHost = "/" }; staticvoid Main(string[] args) { var exchangeAll = "changeHeader"; var queueman = "queueHeader"; using (IConnection conn = rabbitMqFactory.CreateConnection()) using (IModel channel = conn.CreateModel()) { channel.ExchangeDeclare(exchangeAll, type: "headers", durable: true, autoDelete: false); channel.QueueDeclare(queueman, durable: true, exclusive: false, autoDelete: false); channel.QueueBind(queueman, exchangeAll, "",new Dictionary<string, object> { { "sex","man" } }); channel.BasicQos(prefetchSize: 0, prefetchCount: 50, global: false); EventingBasicConsumer consumer = new EventingBasicConsumer(channel); consumer.Received += (model, ea) => { Byte[] body = ea.Body; String message = Encoding.UTF8.GetString(body); Console.WriteLine( message); channel.BasicAck(deliveryTag: ea.DeliveryTag, multiple: false); }; channel.BasicConsume(queue: queueman, autoAck: false, consumer: consumer); Console.ReadLine(); } } } }
原文:https://www.cnblogs.com/chenyishi/p/10242540.html
内容总结
以上是互联网集市为您收集整理的RabbitMQ与.net core(五) topic类型 与 headers类型 的Exchange全部内容,希望文章能够帮你解决RabbitMQ与.net core(五) topic类型 与 headers类型 的Exchange所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。