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.修改 ...\rabbitmq_server-3.6.10\etc\rabbitmq.config.example 文件(新增第18行代码)

  4.8.启动 RabbitMQ 服务

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

基本概念

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

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

 1 using RabbitMQ.Client;
 2 using System;
 3 using System.Text;
 4
 5 //消息生产者控制台
 6 namespace Producer
 7 {
 8     class Program
 9     {
10         static void Main(string[] args)
11         {
12             //创建连接工厂对象
13             var factory = new ConnectionFactory
14             {
15                 //目标主机IP或名称
16                 HostName = "10.202.228.107",
17                 //RabbitMQ Server的用户名称
18                 UserName = "Tua",
19                 //RabbitMQ Server的密码
20                 Password = "Tua",
21                 //RabbitMQ Server的默认端口号是5672可以不用指定
22                 Port = 5672
23             };
24             //创建连接对象
25             using (var connection = factory.CreateConnection())
26             {
27                 //创建消息信道对象
28                 using (var channel = connection.CreateModel())
29                 {
30                     //创建消息队列,只有在该消息队列不存在时才会创建
31                     channel.QueueDeclare
32                     (
33                         //消息队列名称
34                         queue: "Tua",
35                         //是否开启持久,true:即不会因为RabbitMQ服务崩溃重启而丢失消息队列
36                         durable: false,
37                         //是否开启反外,true:即只允许在当前连接中被访问,当连接断开时会自动清除该消息队列
38                         exclusive: false,
39                         //是否开启自动删除,true:即当无任何消息消费者时,也就是说最后一个连接断开时会自动清除该消息队列
40                         autoDelete: false,
41                         //用于消息队列的其它属性(构造参数)
42                         arguments: null
43                     );
44                     string msg = "Mr.Tua";
45                     //将字符串消息转换成二进制数组
46                     var body = Encoding.UTF8.GetBytes(msg);
47                     //发送消息,将消息发布到消息队列中
48                     channel.BasicPublish
49                     (
50                         //消息交换机名称
51                         exchange: string.Empty,
52                         //路由键名称
53                         routingKey: "Tua",
54                         //消息的其它属性
55                         basicProperties: null,
56                         //消息内容
57                         body: body
58                     );
59                     Console.WriteLine("Producer sent message: {0}", msg);
60                     Console.ReadLine();
61                 }
62             }
63         }
64     }
65 }
 1 using RabbitMQ.Client;
 2 using RabbitMQ.Client.Events;
 3 using System;
 4 using System.Text;
 5
 6 //消息消费者控制台
 7 namespace Consumer
 8 {
 9     class Program
10     {
11         static void Main(string[] args)
12         {
13             var factory = new ConnectionFactory
14             {
15                 //目标主机为本地
16                 HostName = "localhost"
17             };
18             using (var connection = factory.CreateConnection())
19             {
20                 using (var channel = connection.CreateModel())
21                 {
22                     //创建消息队列,用于确保不受发送端和接收端先后启动顺序影响
23                     channel.QueueDeclare
24                     (
25                         queue: "Tua",
26                         durable: false,
27                         exclusive: false,
28                         autoDelete: false,
29                         arguments: null
30                     );
31                     //创建消息消费者对象
32                     var consumer = new EventingBasicConsumer(channel);
33                     //异步接收消息时的回调
34                     consumer.Received += (sender, e) =>
35                     {
36                         var body = e.Body;
37                         var msg = Encoding.UTF8.GetString(body);
38                         Console.WriteLine("Consumer received message: {0}", msg);
39                     };
40                     //启动消息消费者
41                     //消息消费者处理完消息任务时需要回应消息生产者,使其删除该消息
42                     //如果消息消费者没有回应,那么消息生产者会将该消息重新发送给其它消息消费者
43                     channel.BasicConsume
44                     (
45                         queue: "Tua",
46                         //是否自动回应,false:即需要手动进行消息回应
47                         noAck: true,
48                         consumer: consumer
49                     );
50                     Console.ReadLine();
51                 }
52             }
53         }
54     }
55 }

运行结果

启动消息生产者控制台:

启动消息消费者控制台:

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

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

时间: 2024-10-13 06:31:25

RabbitMQ 使用场景一的相关文章

RabbitMQ应用场景及原理

转载自:http://blog.csdn.net/whoamiyang/article/details/54954780 1.背景 RabbitMQ是一个由erlang开发的AMQP(Advanved Message Queue)的开源实现. 2.应用场景 2.1异步处理 场景说明:用户注册后,需要发注册邮件和注册短信,传统的做法有两种1.串行的方式;2.并行的方式 (1)串行方式:将注册信息写入数据库后,发送注册邮件,再发送注册短信,以上三个任务全部完成后才返回给客户端. 这有一个问题是,邮件

RabbitMQ使用场景_002_工作队列

工作队列 利用轮循分配来消费任务信息(竞争消费者模式) 背后的主要思想工作队列(又名:任务队列)是为了避免立即做一个资源密集型任务,不得不等待它完成.相反,我们安排以后的任务要做.我们封装任务作为消息并将其发送到一个队列.一个工作进程在后台运行将流行的任务和最终执行这项工作.当您运行许多消费者的任务将在他们之间共享. 循环调度与公平的分配 使用一个任务队列的优点之一是能够轻易并行化"parallelise"工作.如果建立一个任务队列并添加多个消费者,,RabbitMQ将发送每个消息到下

RabbitMQ使用场景_001_简单使用

单发单接模式 这是一个"Hello World"的消息,将用PHP编写两个程序,发送一个消息的生产者,消费者接收信息并打印出来. 在下面的图中,"P"是我们的生产和"C"是我们消费者.中间的框是一个队列,消息缓冲RabbitMQ代表消费者. 第一步 配置环境 1.Composer安装php-amqplib 链接 : https://github.com/php-amqplib/php-amqplib 在composer.json 中增加 { &q

RabbitMQ使用场景_004_路由模式

路由模式 queue只感兴趣这个的exchange.只希望接收交换机中的关键信息,或者说指定内容的信息, 而忽略交换机中的其他消息. direct exchange背后的路由算法很简单--即一个消息的队列binding_key完全匹配message的routing_key. 交换机绑定不同key的队列: 在上图中: exchange X和两个queue绑定在一起.queue Q1的binding key是orange.queue Q2的binding key是black和green. 当P pu

RabbitMQ学习2---使用场景

RabbitMQ主页:https://www.rabbitmq.com/ AMQP AMQP协议是一个高级抽象层消息通信协议,RabbitMQ是AMQP协议的实现.它主要包括以下组件: 1.Server(broker): 接受客户端连接,实现AMQP消息队列和路由功能的进程. 2.Virtual Host:其实是一个虚拟概念,类似于权限控制组,一个Virtual Host里面可以有若干个Exchange和Queue,但是权限控制的最小粒度是Virtual Host 3.Exchange:接受生产

RabbitMQ的几种典型使用场景

AMQP AMQP协议是一个高级抽象层消息通信协议,RabbitMQ是AMQP协议的实现.它主要包括以下组件: 1.Server(broker): 接受客户端连接,实现AMQP消息队列和路由功能的进程. 2.Virtual Host:其实是一个虚拟概念,类似于权限控制组,一个Virtual Host里面可以有若干个Exchange和Queue,但是权限控制的最小粒度是Virtual Host 3.Exchange:接受生产者发送的消息,并根据Binding规则将消息路由给服务器中的队列.Exch

rabbitmq route

AMQP AMQP协议是一个高级抽象层消息通信协议,RabbitMQ是AMQP协议的实现.它主要包括以下组件: 1.Server(broker): 接受客户端连接,实现AMQP消息队列和路由功能的进程. 2.Virtual Host:其实是一个虚拟概念,类似于权限控制组,一个Virtual Host里面可以有若干个Exchange和Queue,但是权限控制的最小粒度是Virtual Host 3.Exchange:接受生产者发送的消息,并根据Binding规则将消息路由给服务器中的队列.Exch

Rabbitmq基本框架和安装(1)

Rabbitmq简介.特点.使用场景: 1.1)RabbitMQ是一个遵循AMQP协议的消息中间件,它从生产者接收消息并递送给消费者,在这个过程中,根据规则进行路由,缓存与持久化. 1.2)AMQP(Advanced Message Queuing Protocol) 高级消息队列协议,应用层协议的一个开放标准,为面向消息的中间件设计.AMQP是一个提供统一消息服务的应用层标准协议,基于此协议的客户端与消息中间件可传递消息,并不受不同客户端/中间件产品,不同开发语言等条件的限制.AMQP的主要特

RabbitMQ学习和使用

RabbitMQ学习和使用 RabbitMQ介绍 MQ全称Message Queue 消息队列,RabbitMQ是基于AMQP(高级消息队列协议)实现的.消息队列通常用以应用之间相互通信,解决同步问题.MQ是典型的生产者消费者模型,RabbitMQ最常用的三种模式是点对点模式.发布订阅模式.广播模式. RabbitMQ is a message-queueing software called a message broker or queue manager. Simply said; It