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 相关的组件。

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

最新文章

  1. Socket Programming in C#--Getting Started
  2. django - 好的 获取 参数值 方法
  3. Linux Shell 脚本
  4. Android文件下载(实现断点续传)
  5. 方案:解决 wordpress 中 gravatar 头像被墙问题
  6. 2014.8.4我出的模拟赛【NTR酋长】
  7. hdu1198--并查集
  8. 大数据揭示的10个常见JAVA编程错误
  9. 【一】Swift 3.0 新浪微博项目实战 -整体框架搭建
  10. Oracle,Mysql ,SQL Server 三大数据库带参数的模糊查询, 拼接查询条件问题
  11. CCF-201403-1-相反数
  12. 基于Java使用Snmp4j进行监控与采集(snmptrap、snmpwalk、snmpget)
  13. 读《图解HTTP》有感-(确认访问用户身份的认证)
  14. C#实现多级子目录Zip压缩解压实例
  15. 使用Phalcon框架开发一个简易的博客系统
  16. 性能测试 基于Python结合InfluxDB及Grafana图表实时采集Linux多主机性能数据
  17. 大数据量下的SQL Server数据库自身优化
  18. js 可拖动div 调整大小
  19. 『TensorFlow』读书笔记_AlexNet
  20. 涂抹mysql笔记-InnoDB/MyISAM及其它各种存储引擎

热门文章

  1. spring定时器完整
  2. 1.3 Quick Start中 Step 4: Send some messages官网剖析(博主推荐)
  3. Spring中JDBCTemplate的入门
  4. [Vue + TS] Use Dependency Injection in Vue Using @Inject and @Provide Decorators with TypeScript
  5. mmx-编译脚本
  6. 开发板 Linux驱动视频 驱动是什么
  7. 基于深度学习的目标检测(object detection)—— rcnn、fast-rcnn、faster-rcnn
  8. report_timing_requirement
  9. js课程 4-11 表格如何实现隔行换色
  10. 开发板 视频04_05 ubuntu的联网及基本设置