• 消息队列RabbitMq入门(一)


     

    一,RabbitMQ简介

      在介绍RabbitMQ之前,先让我们共同来了解一下什么是”消息队列”。

           度娘曰:“消息”是在两台计算机间传送的数据单位。消息可以非常简单,例如只包含文本字符串;也可以更复杂,可能包含嵌入对象
      消息被发送到队列中。“消息队列”是在消息的传输过程中保存消息的容器。消息队列管理器在将消息从它的源中继到它的目标时充当中间人。队列的主要目的是提供路由并保证消息的传递;如果发送消息时接收者不可用,消息队列会保留消息,直到可以成功地传递它。
      而RabbitMQ就是这种保存消息的容器的其中一种,当然还有其他容器:Active MQ,Zero MQ,Kafka等。
      RabbitMQ是一个开源,跨语言,跨平台的容器,官网http://www.rabbitmq.com

    二,RabbitMQ下载安装

      RabbitMQ支持多语言跨平台,不同语言可以下载不同的版本。我以C#版本为例将其下载并安装在Windows平台。

      由于RabbitMQ服务器是基于erlang语言编写的,所以我们需要安装支持Windows 版的Erlang,下载地址:http://www.erlang.org/downloads,选择下图只向文件下载并安装

      (注:如没有安装Windows 版的Erlang,你就直接下载安装RabbitMQ进行安装,会提示先安装Erlang,在安装RabbitMQ服务器)

    下载完成后点击exe进行安装

     

     

     下载安装RabbitMQ服务器:http://www.rabbitmq.com/install-windows-manual.html

     

     

     

    同步Erlang Cookie:Erlang cookie是用于RabbitMQ集群节点CLI工具之间验证的共享密钥该值存储在通常称为Erlang Cookie文件的文件中。

    用户erlang.cookie位置:C:Users用户

    Windows服务目录位置:C:WindowsSystem32configsystemprofile

    位置:要确保Erlang Cookie文件包含相同的字符串,请复制上面列出的Windows服务目录中.erlang.cookie文件以替换用户.erlang.cookie

     如何Erlang 设置环境变量请安官网位置查找

     

    启用RabbitMQ管理插件:

    开始-->RabbitMQ SERVER-->RabbitMQ Commond控制台程序:

    执行命令:rabbitmq-plugins enable rabbitmq_management

    在浏览器中输入http://localhost:15672/打开管理登录界面

    默认用户名密码均为:"guest"

     

    在vs中我们可以通过nuget安装RabbitMQ客户端

    三,RabbitMQ使用

    几个重要概念:

    Broker:简单来说就是消息队列服务器实体。

      Exchange:消息交换机,它指定消息按什么规则,路由到哪个队列。

      Queue:消息队列载体,每个消息都会被投入到一个或多个队列。

      Binding:绑定,它的作用就是把exchange和queue按照路由规则绑定起来。

      Routing Key:路由关键字,exchange根据这个关键字进行消息投递。

      vhost:虚拟主机,一个broker里可以开设多个vhost,用作不同用户的权限分离。

      producer:消息生产者,就是投递消息的程序。

      consumer:消息消费者,就是接受消息的程序。

      channel:消息通道,在客户端的每个连接里,可建立多个channel,每个channel代表一个会话任务。

    消息队列的使用过程,如下:

    (1)客户端连接到消息队列服务器,打开一个channel。

    (2)客户端声明一个exchange,并设置相关属性。

    (3)客户端声明一个queue,并设置相关属性。

    (4)客户端使用routing key,在exchange和queue之间建立好绑定关系。

    (5)客户端投递消息到exchange。

    exchange接收到消息后,就根据消息的key和已经设置的binding,进行消息路由,将消息投递到一个或多个队列里。

     

    案例:建立两个控制台程序  发送消息Send.cs

    public static void Send(string msg)
            {
          //连接字符创
    var factory = new ConnectionFactory() { HostName = "192.168.13.226", VirtualHost = "rabbittest", UserName = "admin",Password = "1234567"}; using (var connection = factory.CreateConnection()) using (var channel = connection.CreateModel()) { channel.ExchangeDeclare(exchange: "logs", type: "fanout"); var body = Encoding.UTF8.GetBytes(msg); //消息确认 var properties = channel.CreateBasicProperties(); properties.Persistent = true;           //发送消息 channel.BasicPublish(exchange: "logs", routingKey: "", basicProperties: properties, body: body); } }

    接收消息:

    var factory = new ConnectionFactory() { HostName = "localhost", VirtualHost = "rabbittest" };
                using (var connection = factory.CreateConnection())
                using (var channel = connection.CreateModel())
                {
                    channel.ExchangeDeclare(exchange: "logs", type: "fanout");
                    //交换器与队列绑定
                       var queueName = channel.QueueDeclare().QueueName;
                    channel.QueueBind(queue: queueName,
                        exchange: "logs",
                        routingKey: "");
    
                    Console.WriteLine(" [*] Waiting for logs.");
    
                    var consumer = new EventingBasicConsumer(channel);
                    consumer.Received += (model, ea) =>
                    {
                        var body = ea.Body;
                        var message = Encoding.UTF8.GetString(body);
                        Console.WriteLine(" [x] {0}", message);
                    };
                    channel.BasicConsume(queue: queueName,
                        autoAck: true,
                        consumer: consumer);
    
                    Console.WriteLine(" Press [enter] to exit.");
                    Console.ReadLine();
                }

    测试结果:

     好了,就到这里吧

     

     

     

     

     

     

     

     

  • 相关阅读:
    Angular相关UI框架的安装
    Visual Studio Code 编辑器常用插件
    Groovy特性
    Notification(Android)消息推送机制
    Sublime SVN插件使用方法 PS:翻出来的旧笔记,现在Sublime和svn用的都不多了
    Python基本语法练习笔记(一)
    首篇博文占坑
    apache2修改用户和组
    如何修改script.bin/script.fex
    perl的INC设置
  • 原文地址:https://www.cnblogs.com/MrLiu90/p/8528742.html
Copyright © 2020-2023  润新知