RabbitMQ学习-简单DEMO实现

回眸只為那壹抹淺笑 提交于 2020-08-08 20:54:56

介绍:

RabbitMQ是一个由erlang开发的基于AMQP(Advanced Message Queue )协议的开源实现。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面都非常的优秀。是当前最主流的消息中间件之一。(官网:http://www.rabbitmq.com

AMQP,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,同样,消息使用者也不用知道发送者的存在。AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。

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

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

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

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

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

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

 

    P: 为Producer,数据的发送方。

    C:为Consumer,数据的接收方。

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

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

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

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

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

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

搭建环境(Windows)

  1. 安装RabbitMQ之前要先安装Erlang: http://www.erlang.org/download.html
  2. 之后安装RabbitMQ:http://www.rabbitmq.com/download.html
  3. 配置:安装完以后erlang需要手动设置ERLANG_HOME 的系统变量(set ERLANG_HOME=安装路径)
  4. 激活Rabbit MQ's Management Plugin--Rabbit MQ 管理插件(可选)
    命令行(cmd路径为rabbitmq安装目录的sbin目录下执行)使用以下命令:rabbitmq-piugins.bat enable  rabbitmq_management
  5. 创建用户、密码、绑定权限等 可用管理插件也可使用命令行(不多说自己找找)
  6. 使用浏览器打开 http://localhost:15672 访问Rabbit Mq的管理控制台,使用刚才创建的账号登陆系统即可。

开发(C#)

  RabbitMQ.Client 是rabbitmq 官方提供的的客户端

  直接创建项目,Nuget 安装 RabbitMQ.Client 即可

  废话不多说直接上代码:

生产者

 1 ConnectionFactory connectionFactory = new ConnectionFactory();
 2             connectionFactory.HostName = "localhost";
 3             connectionFactory.UserName = "jason";
 4             connectionFactory.Password = "123456";
 5 
 6             using (var connection = connectionFactory.CreateConnection())
 7             {
 8                 using (var channel = connection.CreateModel())
 9                 {
10                     channel.QueueDeclare("RMQ_DEMO", false, false, false, null);//创建一个名称为hello的消息队列
11                     string message = "First Message"; //传递的消息内容
12                     var body = Encoding.UTF8.GetBytes(message);
13                     channel.BasicPublish("", "hello", null, body); //开始传递
14                     Console.WriteLine("已发送: {0}", message);
15                     Console.ReadLine();
16                 }
17             }
View Code

消费者

 1 var factory = new ConnectionFactory();
 2             factory.HostName = "localhost";
 3             factory.UserName = "guest";
 4             factory.Password = "guest";
 5 
 6             using (var connection = factory.CreateConnection())
 7             {
 8                 using (var channel = connection.CreateModel())
 9                 {
10                     channel.QueueDeclare("RMQ_DEMO", false, false, false, null);
11 
12                     var consumer = new EventingBasicConsumer(channel);
13                     channel.BasicConsume("RMQ_DEMO", false, consumer);
14                     consumer.Received += (model, ea) =>
15                     {
16                         var body = ea.Body;
17                         var message = Encoding.UTF8.GetString(body.ToArray());
18                         Console.WriteLine("已接收: {0}", message);
19                     };
20                     Console.ReadLine();
21                 }
22             }
View Code

 

 

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!