RabbitMQ的基本使用

RabbitMQ的基本使用

引入程序集:RabbitMQ.Client

生产者

C# 复制代码
/// <summary>
/// ProducerWrites 写入消息  ConsumerConsumption 消费消息
/// </summary>
public class ProducerWrites
{
    public static void Send()
    {

        string path = AppDomain.CurrentDomain.BaseDirectory;
        string tag = path.Split('/', '\\').Last(s => !string.IsNullOrEmpty(s));
        Console.WriteLine($"这里是 {tag} 启动了。。");

        //创建链接:通过一个connection工厂来创建链接
        ConnectionFactory factory = new ConnectionFactory();
        factory.HostName = "localhost";//RabbitMQ服务在本地运行
        factory.UserName = "guest";//用户名
        factory.Password = "guest";//密码 
        //factory.VirtualHost = "/Richard";
        //创建链接
        using (IConnection connection = factory.CreateConnection())
        {
            //创建一个信道;
            using (IModel channel = connection.CreateModel())
            { 
                //删除队列
                channel.QueueDelete("ProducerWrites"); 
                //删除交换机
                channel.ExchangeDelete("ProducerWritesExChange"); 
                //创建队列
                channel.QueueDeclare(queue: "ProducerWrites", durable: true, exclusive: false, autoDelete: false, arguments: null);
                //创建交换机
                channel.ExchangeDeclare(exchange: "ProducerWritesExChange", type: ExchangeType.Direct, durable: true, autoDelete: false, arguments: null);

                //交换机和队列绑定
                channel.QueueBind(queue: "ProducerWrites", exchange: "ProducerWritesExChange", routingKey: "advanced", arguments: null);
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine($"生产者{tag}已准备就绪~~~");
                 
                {
                    for (int i = 0; i < 20; i++)
                    {
                        IBasicProperties basicProperties = channel.CreateBasicProperties();
                        basicProperties.Persistent = true;
                        //basicProperties.DeliveryMode = 2;
                        string message = $"{tag}:大家伙欢迎大家来到.NET高级班的VIP课程_{i+1}";
                        byte[] body = Encoding.UTF8.GetBytes(message);
                        channel.BasicPublish(exchange: "ProducerWritesExChange",
                                        routingKey: "advanced",
                                        basicProperties: basicProperties,
                                        body: body);
                        Console.WriteLine($"{message} 已发送~");
                        Thread.Sleep(500);
                    }

                    while (true)
                    {
                        IBasicProperties basicProperties = channel.CreateBasicProperties();
                        basicProperties.Persistent = true;
                        //basicProperties.DeliveryMode = 2;
                        Console.WriteLine("请输入消息内容:");
                        string message =Console.ReadLine();
                        byte[] body = Encoding.UTF8.GetBytes(message);
                        channel.BasicPublish(exchange: "ProducerWritesExChange",
                                        routingKey: "advanced",
                                        basicProperties: basicProperties,
                                        body: body);
                        Console.WriteLine($"{message} 已发送~"); 
                        Thread.Sleep(500);
                    }
                }
            }
        }
    }
}

消费者

C# 复制代码
public class ConsumerConsumption
{
    /// <summary>
    /// ProducerWrites 写入消息  ConsumerConsumption 消费消息
    /// </summary>
    public static void Consumption()
    {

        string path = AppDomain.CurrentDomain.BaseDirectory;
        string tag = path.Split('/', '\\').Last(s => !string.IsNullOrEmpty(s));
        Console.WriteLine($"这里是 {tag} 启动了。。");

        var factory = new ConnectionFactory();
        factory.HostName = "localhost";//RabbitMQ服务在本地运行
        factory.UserName = "guest";//用户名
        factory.Password = "guest";//密码 
        using (var connection = factory.CreateConnection())
        {
            using (var channel = connection.CreateModel())
            {
                Console.ForegroundColor = ConsoleColor.Green;
                try
                {
                    channel.QueueDeclare(queue: "ProducerWrites", durable: true, exclusive: false, autoDelete: false, arguments: null);
                    channel.ExchangeDeclare(exchange: "ProducerWritesExChange", type: ExchangeType.Direct, durable: true, autoDelete: false, arguments: null);
                    channel.QueueBind(queue: "ProducerWrites", exchange: "ProducerWritesExChange", routingKey: "advanced", arguments: null);


                    //rabbitMq消费消息是通过事件驱动的:
                    var consumer = new EventingBasicConsumer(channel);
                    consumer.Received += (model, ea) =>  //如果有消息进入到Rabbitmq,就会触发这个事件来完成消息的消费;
                    {
                        var body = ea.Body;
                        var message = Encoding.UTF8.GetString(body.ToArray());
                        Console.WriteLine($"{tag}接受消息: {message}");
                    };
                    channel.BasicConsume(queue: "ProducerWrites",
                                 autoAck: true,
                                 consumer: consumer);
                    Console.WriteLine(" Press [enter] to exit.");
                    Console.ReadLine();
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
            }
        }
    }
}
相关推荐
晨星shine16 小时前
GC、Dispose、Unmanaged Resource 和 Managed Resource
后端·c#
回家路上绕了弯17 小时前
深入解析Agent Subagent架构:原理、协同逻辑与实战落地指南
分布式·后端
用户83071968408220 小时前
Spring Boot 集成 RabbitMQ :8 个最佳实践,杜绝消息丢失与队列阻塞
spring boot·后端·rabbitmq
用户298698530141 天前
.NET 文档自动化:Spire.Doc 设置奇偶页页眉/页脚的最佳实践
后端·c#·.net
用户3667462526741 天前
接口文档汇总 - 2.设备状态管理
c#
用户3667462526741 天前
接口文档汇总 - 3.PLC通信管理
c#
Ray Liang2 天前
用六边形架构与整洁架构对比是伪命题?
java·python·c#·架构设计
用户8307196840823 天前
RabbitMQ vs RocketMQ 事务大对决:一个在“裸奔”,一个在“开挂”?
后端·rabbitmq·rocketmq
初次攀爬者4 天前
RabbitMQ的消息模式和高级特性
后端·消息队列·rabbitmq
Scout-leaf5 天前
WPF新手村教程(三)—— 路由事件
c#·wpf