RabbitMQ的使用

RabbitMq是一种消息中间件。主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在。如果系统中出现以下情况,你可以考虑使用消息队列。

      1.执行的任务非实时性的,并且执行此任务非常耗时。

      2.需要进行异步消息的处理

      3.应用解耦

      4.消息通讯

  Rabbitmq的使用:

   (1)基本使用(Hello Word)

     1.发送方

        static void Main(string[] args)
        {
            var factory = new ConnectionFactory() { HostName = "localhost" };
            //创建一个链接
            using(var connection=factory.CreateConnection())
            {
                //创建一个管道
                var channel = connection.CreateModel();
                //声明一个队列
                channel.QueueDeclare("one",false,false,false,null);
                for (int i = 0; i < 6; i++)
                {
                     var message = "人生若只如初见!"+i;
                     var body = Encoding.UTF8.GetBytes(message);
                     var properties = channel.CreateBasicProperties();
                     properties.MessageId = Guid.NewGuid().ToString();
                   // properties.SetPersistent(true);
                    消息持久化(值为2),非持久化(值为1)
                     properties.DeliveryMode = 2;
                    //发送消息(每隔6秒钟发送一次消息),参数:1.交换机名称  2.路由关键字 3基本属性 4 消息内容
                     channel.BasicPublish("", "default", properties, body);
                     Thread.Sleep(6000);
                }  
            }
            Console.Read();
        }

        2 接收方

        static void Main(string[] args)
        {
            //创建连接
            var factory = new ConnectionFactory() { HostName="localhost"};
            //创建一个链接到指定的端点
            using(var connection=factory.CreateConnection())
            {
                //创建并返回一个通道,会话和模型
                using(var channel=connection.CreateModel()){
                    //声明一个队列
                    channel.QueueDeclare("default",false,false,false,null);
                    //有消息到达将被自动接收
                    var customer =new EventingBasicConsumer(channel);
                    //注册接收事件
                    customer.Received += (model, ea) =>
                    {
                        var body = Encoding.UTF8.GetString(ea.Body);
                        Console.WriteLine(body);
                        Console.WriteLine("正在等待~~~");
                        Thread.Sleep(7000);
                    };
                 
                    //消息收到后,反馈一个应答消息给服务器。true是不需要应答
                    channel.BasicConsume("default", true, customer);
                    Console.Read();
                }

            }
           
        }

  (2)Publish/Subscribe模式(将消息分发到多个Consumer中)

    1.发送端

      static void Main(string[] args)
        {
            var factory = new ConnectionFactory() { HostName="localhost" };
            using(var connection=factory.CreateConnection())
            {
                using (var channel = connection.CreateModel())
                {
                    channel.ExchangeDeclare("one_exchange", "fanout");
                    for (int i = 0; i < 10; i++)
                    {
                        var message = "人生若只如初见" + i;
                        var body=Encoding.UTF8.GetBytes(message);
                        channel.BasicPublish("one_exchange", "", null, body);
                        Thread.Sleep(2000);
                    }

                }
            }
            Console.Read();
        }

      2接收端

          static void Main(string[] args)
        {
            var factory = new ConnectionFactory() { HostName = "localhost" };
            using (var connection = factory.CreateConnection())
            {
                using (var channel = connection.CreateModel())
                {
                    //声明一个交换器
                    channel.ExchangeDeclare("one_exchange", "fanout");
                    //声明一个(随机)队列,获取队列名
                    string queuename = channel.QueueDeclare().QueueName;
                    //将队列和交换器进行绑定
                    channel.QueueBind(queuename, "one_exchange", "");
                    var customer = new EventingBasicConsumer(channel);
                    customer.Received += (model, ea) =>
                    {
                        Console.WriteLine(Encoding.UTF8.GetString(ea.Body));

                        //等待6秒

                       Thread.Sleep(6000);
                    };
                    //接收消息
                    channel.BasicConsume(queuename, true, customer);
                    Console.Read();
                }
            }
        }

    

   


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值