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);
                }
            }
        }
    }
}
相关推荐
吴可可12310 小时前
C#用OpenCVSharp提取轮廓生成CAD多段线
c#
玖玥拾14 小时前
Unity 3D 笔记(十四)Unity/C# Socket 网络笔记3
服务器·网络·unity·c#
玖玥拾16 小时前
Unity 3D 笔记(十七)Unity/C# Socket 网络笔记6
服务器·网络·unity·c#
geovindu16 小时前
CSharp: Iterative Algorithms
开发语言·后端·算法·c#·.net·迭代算法
影寂ldy16 小时前
C# HttpClient 分片下载、断点续传、暂停取消(完整项目知识点)
开发语言·c#
网络工程小王17 小时前
【HCIE-AI】12.deepspeed分布式并行训练进阶版
人工智能·pytorch·分布式·学习·昇腾·deepspeed
code bean18 小时前
【C#】 主构造函数(Primary Constructors)的来龙去脉
开发语言·c#
Suxing918 小时前
C语言基础分享:“群租房”和“点名册”——联合体与枚举
c语言·算法·c#
czhc114007566319 小时前
725: [property: XmlIgnore]
c#
kingwebo'sZone19 小时前
C#事件声明办法
java·前端·c#