RabbitMQ系列
RabbitMQ(七)——主题模式
前言
本章我们学习主题模式(Topic),主题模式与路由模式类似,不同的是路由模式生产者向指定路由发送消息,消费者接收指定路由的消息;主题模式生产者向交换机发送消息后,消费者可以对队列进行匹配,提供两个匹配字符,’ * ‘星号和 ‘ # ’井号,‘ * ’匹配一个词,‘ # ’ 匹配多个词,一般使用#号匹配多个,*号用的比较少。
解释:生产者P向topic交换机发送消息,向指定routekey发布消息,消费者通过绑定routekey匹配词接收消息。
如:生产者向routekey : topic.orange.rabbit 发送消息,消费者可通过绑定*.orange.* / *.*.rabbit接收到消息;
示例
生产者:
static void Main(string[] args) { Console.WriteLine("TopicServer发布服务器启动..."); //创建连接工厂 var factory = new ConnectionFactory() { HostName = "127.0.0.1", UserName = "guest", Password = "guest" }; //创建连接和通道 using (var conn = factory.CreateConnection()) { using (var channel = conn.CreateModel()) { //创建topic类型交换机 channel.ExchangeDeclare("topicExchange", "topic"); string msg = ""; //模拟向不同路由发送消息 for (int i = 0; i < 40; i++) { msg = $"发布消息{i}"; var body = Encoding.UTF8.GetBytes(msg); string Topic = ""; if (i % 2 == 0) { Topic = "Topic.add"; } else { Topic = "Topic.remove"; } channel.BasicPublish("topicExchange", Topic, null, body); Console.WriteLine($"{Topic}-发布消息成功:{msg}"); Thread.Sleep(1000); } Console.ReadKey(); } } }