zoukankan      html  css  js  c++  java
  • RabbitMQ 服务

    RabbitMQ 使用场景一

     

    安装环境

    1.下载安装 Erlang 运行时环境

    2.下载安装 RabbitMQ Server 应用程序

    3.启动 RabbitMQ 服务(默认启动)

    4.安装管理平台插件并打开远程访问权限

      4.1.打开 RabbitMQ Comman Prompt

      4.2.执行 rabbitmq-plugins enable rabbitmq_management

      4.3.访问 http://localhost:15672 查看 RabbitMQ Server 相关信息(默认账密为guest)

      4.4.新增远程访问用户

      4.5.点击 Set permission 授权给新用户

      4.6.停止 RabbitMQ 服务

      4.7.修改 ... abbitmq_server-3.6.10etc abbitmq.config.example 文件(新增第18行代码)

      4.8.启动 RabbitMQ 服务

      4.9.访问 http://IP:15672 测试是否成功

    基本概念

     单个消息生产者 VS 单个消息消费者

       在 .NET 中使用 RabbitMQ 需要下载它的客户端程序集来获取并引用 RabbitMQ 相关的组件。

    复制代码
    using RabbitMQ.Client;
    using System;
    using System.Text;
    
    //消息生产者控制台
    namespace Producer
    {
        class Program
        {
            static void Main(string[] args)
            {
                //创建连接工厂对象
                var factory = new ConnectionFactory
                {
                    HostName = "10.202.228.107",//目标主机IP或名称
                    UserName = "Tua",//RabbitMQ服务的用户名称
                    Password = "Tua",//RabbitMQ服务的密码
                    Port = 5672//RabbitMQ服务的默认端口号是5672,可以不用显示指定端口
                };
                //创建连接对象
                using (var connection = factory.CreateConnection())
                {
                    //创建消息信道对象
                    using (var channel = connection.CreateModel())
                    {
                        //创建消息队列,只有在该消息队列不存在时才会创建
                        channel.QueueDeclare
                        (
                            queue: "Tua",//消息队列名称
                            durable: false,//是否开启持久,true:即不会因为RabbitMQ服务崩溃重启而丢失消息队列
                            exclusive: false,//是否开启反外,true:即只允许在当前连接中被访问,当连接断开时会自动清除该消息队列
                            autoDelete: false,//是否开启自动删除,true:即当无任何消息消费者时,也就是说最后一个连接断开时会自动清除该消息队列
                            arguments: null//用于消息队列的其它属性(构造参数)
                        );
                        string msg = "Mr.Tua";
                        var body = Encoding.UTF8.GetBytes(msg);//将字符串消息转换成二进制数组
                        //发送消息,将消息发布到消息队列中
                        channel.BasicPublish
                        (
                            exchange: string.Empty,//消息交换机名称
                            routingKey: "Tua",//路由键名称
                            basicProperties: null,//消息的其它属性
                            body: body//消息内容
                        );
                        Console.WriteLine("Producer sent message: {0}", msg);
                        Console.ReadLine();
                    }
                }
            }
        }
    }
    复制代码
    复制代码
    using RabbitMQ.Client;
    using RabbitMQ.Client.Events;
    using System;
    using System.Text;
    
    //消息消费者控制台
    namespace Consumer
    {
        class Program
        {
            static void Main(string[] args)
            {
                var factory = new ConnectionFactory
                {
                    //目标主机为本地
                    HostName = "localhost"
                };
                using (var connection = factory.CreateConnection())
                {
                    using (var channel = connection.CreateModel())
                    {
                        //创建消息队列,用于确保不受发送端和接收端先后启动顺序影响
                        channel.QueueDeclare
                        (
                            queue: "Tua",
                            durable: false,
                            exclusive: false,
                            autoDelete: false,
                            arguments: null
                        );
                        //创建消息消费者对象
                        var consumer = new EventingBasicConsumer(channel);
                        //异步接收消息时的回调
                        consumer.Received += (sender, e) =>
                        {
                            var body = e.Body;
                            var msg = Encoding.UTF8.GetString(body);
                            Console.WriteLine("Consumer received message: {0}", msg);
                        };
                        //启动消息消费者
                        //消息消费者处理完消息任务时需要回应消息生产者,使其删除该消息
                        //如果消息消费者没有回应,那么消息生产者会将该消息重新发送给其它消息消费者
                        channel.BasicConsume
                        (
                            queue: "Tua",
                            noAck: true,//是否自动回应,false:即需要手动进行消息回应
                            consumer: consumer
                        );
                        Console.ReadLine();
                    }
                }
            }
        }
    }
    复制代码

     运行结果

       启动消息生产者控制台:

       启动消息消费者控制台:

       在 RabbitMQ Comman Prompt 中执行 rabbitmqctl list_queues 查看消息队列:

       从本示例的运行结果可以看出 Producer 在 RabbitMQ Server 中创建了一个名为 Tua 的消息队列并含有一条 Mr.Tua的消息,当 Consumer 接收到该消息后并且 Producer 得到了回应就会立即删除该消息。

     
    分类: RabbitMQ
  • 相关阅读:
    700.二叉搜索树中的搜索
    645.错误的集合
    567.字符串的排列
    560.和为K的子数组
    518.零钱兑换 II
    516.最长回文子序列
    509.斐波那契数
    503.下一个更大元素 II
    496.下一个更大元素 I
    leetcode 1171 Remove Zero Sum Consecutive Nodes from Linked List
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/7323457.html
Copyright © 2011-2022 走看看