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);
                }
            }
        }
    }
}
相关推荐
双河子思42 分钟前
《代码整洁之道》——读书笔记(持续更新)
开发语言·c++·c#
诙_1 小时前
unity——C#
unity·c#·游戏引擎
Francek Chen1 小时前
【大数据处理与分析】MapReduce:05 MapReduce的具体应用
大数据·hadoop·分布式·mapreduce
cici158741 小时前
C# LAS 点云读取与处理工具
stm32·单片机·c#
OnlyEasyCode2 小时前
C# 发送QQ邮箱验证码or其他
开发语言·c#
我是一颗柠檬2 小时前
【Java项目技术亮点】分布式锁实现与优化:从Redisson到ZooKeeper,彻底搞懂分布式锁的底层原理
java·redis·分布式·中间件·java-zookeeper
123的故事3 小时前
工具分享(2)-NSmartProxy内网穿透工具。
c#·.net·nsmartproxy
moonsims4 小时前
基于Lattice Mesh的AI 的分布式共识与动态任务分配架构的无人机群“去中心化无声协同”技术和极低带宽下的韧性通信技术
人工智能·分布式·架构
一个骇客4 小时前
批处理模型详解:从 MapReduce 到数据流引擎
分布式·架构