RabbitMQ - Topic - 笔记

using RabbitMQ.Client;

namespace RabbitMQProject
{
    public class MQHelper
    {
        public static ConnectionFactory GetSetting()
        {
            var factory = new ConnectionFactory()
            {
                HostName = "192.168.171.129",
                Port = 5672,
                UserName = "admin",
                Password = "admin",
                VirtualHost = "/"
            };

            return factory;
        }
    }
}
using System;
using System.Collections.Generic;
using System.Text;
using RabbitMQ.Client;
using RabbitMQ.Client.Events;
using RabbitMQProject;

namespace Receive
{
    public class TopicReceive
    {
        public static void ReceiveMessage()
        {
            var factory = MQHelper.GetSetting();

            using (var connection = factory.CreateConnection())
            {
                using (var channel = connection.CreateModel())
                {
                    // 声明交换机对象
                    channel.ExchangeDeclare(exchange:"topic_exchange",  // 交换机名称
                                            type:"topic");              // 交换机类型

                    // 创建队列
                    var queueName1 = "topic_queue1";
                    channel.QueueDeclare(queue: queueName1,
                                         durable: false,
                                         exclusive: false,
                                         autoDelete: false,
                                         arguments: null);
                    var queueName2 = "topic_queue2";
                    channel.QueueDeclare(queue: queueName2,
                                         durable: false,
                                         exclusive: false,
                                         autoDelete: false,
                                         arguments: null);
                    var queueName3 = "topic_queue3";
                    channel.QueueDeclare(queue: queueName3,
                                         durable: false,
                                         exclusive: false,
                                         autoDelete: false,
                                         arguments: null);

                    // 绑定到交换机
                    channel.QueueBind(queue: queueName1,
                                      exchange: "topic_exchange",
                                      routingKey: "user.data.*");
                    channel.QueueBind(queue: queueName2,
                                      exchange: "topic_exchange",
                                      routingKey: "user.data.delete");
                    channel.QueueBind(queue: queueName3,
                                      exchange: "topic_exchange",
                                      routingKey: "user.data.update");

                    #region
                    //1. `durable`(持久化):如果将其设置为true,队列将会被持久化,即使RabbitMQ服务器在重启后也能够保持队列的持久化状态。如果设置为false,队列将是非持久化的,这意味着在RabbitMQ服务器重启后,队列将会被删除。

                    //2. `exclusive`(排他性):如果将其设置为true,队列将仅供声明它的连接使用,并且一旦连接关闭,队列将自动删除。这对于创建临时队列非常有用。如果将其设置为false,队列将是共享的,多个连接可以声明、使用和删除该队列。

                    //3. `autoDelete`(自动删除):如果将其设置为true,队列将会在不再使用时自动删除。当最后一个消费者从队列中取消订阅时,队列将被自动删除。如果将其设置为false,队列将不会自动删除,除非明确执行删除操作。

                    //4. `arguments`(参数):这个参数可以用来传递给队列的其他配置参数。您可以通过设置不同的参数值来定制队列的行为,例如设置消息的过期时间、最大长度等。在这个例子中,我们将其设置为`null`,表示没有其他的队列参数配置。
                    #endregion

                    var consumer = new EventingBasicConsumer(channel);

                    consumer.Received += (model, ea) =>
                    {
                        var body = ea.Body.ToArray();
                        var message = Encoding.UTF8.GetString(body);
                        var routingKey = ea.RoutingKey;
                        Console.WriteLine(" [x] Received '{0}' : '{1}'", routingKey, message);
                    };

                    channel.BasicConsume(queue: queueName3,
                                         autoAck: true,
                                         consumer: consumer);

                    Console.WriteLine(" Press [enter] to exit.");
                    Console.ReadLine();
                }
            }
        }
    }
}
using System;
using System.Collections.Generic;
using System.Text;
using RabbitMQ.Client;
using RabbitMQProject;

namespace Send
{
    internal class TopicSend
    {
        public static void SendMessage()
        {
            var factory = MQHelper.GetSetting();

            using (var connection = factory.CreateConnection())
            {
                using (var channel = connection.CreateModel())
                {
                    // 声明交换机对象
                    channel.ExchangeDeclare("topic_exchange", "topic");

                     创建队列
                    //var queueName1 = "topic_queue1";
                    //channel.QueueDeclare(queue: queueName1,
                    //                     durable: false,
                    //                     exclusive: false,
                    //                     autoDelete: false,
                    //                     arguments: null);
                    //var queueName2 = "topic_queue2";
                    //channel.QueueDeclare(queue: queueName2,
                    //                     durable: false,
                    //                     exclusive: false,
                    //                     autoDelete: false,
                    //                     arguments: null);
                    //var queueName3 = "topic_queue3";
                    //channel.QueueDeclare(queue: queueName3,
                    //                     durable: false,
                    //                     exclusive: false,
                    //                     autoDelete: false,
                    //                     arguments: null);

                     绑定到交换机
                    //channel.QueueBind(queue: queueName1,
                    //                  exchange: "topic_exchange",
                    //                  routingKey: "user.data.*");
                    //channel.QueueBind(queue: queueName2,
                    //                  exchange: "topic_exchange",
                    //                  routingKey: "user.data.delete");
                    //channel.QueueBind(queue: queueName3,
                    //                  exchange: "topic_exchange",
                    //                  routingKey: "user.data.update");

                    for (int i = 0; i < 10; i++)
                    {
                        string message = $"RabbitMQ Topic {i + 1} Message";
                        var body = Encoding.UTF8.GetBytes(message);

                        channel.BasicPublish(exchange: "topic_exchange",
                                         routingKey: "user.data.update",
                                         basicProperties: null,
                                         body: body);

                        Console.WriteLine("send topic {0} message", i + 1);
                    }
                }
            }
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值