目录

RabbitMQ --- Work Queues(工作队列)

RabbitMQ --- Publish/Subscribe(发布/订阅)

RabbitMQ --- Routing(路由)

安装环境

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 = //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",//路由键名称,指定发送到"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 --- Hello Mr.Tua的更多相关文章

  1. RabbitMQ --- Work Queues(工作队列)

    目录 RabbitMQ --- Hello Mr.Tua 前言 Work Queues 即工作队列,它表示一个 Producer 对应多个 Consumer,包括两种分发模式:轮循分发(Round-r ...

  2. RabbitMQ --- Publish/Subscribe(发布/订阅)

    目录 RabbitMQ --- Hello Mr.Tua RabbitMQ --- Work Queues(工作队列) 前言 在第二篇文章中介绍了 Work Queues(工作队列),它适用于把一个消 ...

  3. RabbitMQ --- Routing(路由)

    目录 RabbitMQ --- Hello Mr.Tua RabbitMQ --- Work Queues(工作队列) RabbitMQ --- Publish/Subscribe(发布/订阅) 前言 ...

  4. RabbitMQ 使用场景一

    安装环境 1.下载安装 Erlang 运行时环境 2.下载安装 RabbitMQ Server 应用程序 3.启动 RabbitMQ 服务(默认启动) 4.安装管理平台插件并打开远程访问权限 4.1. ...

  5. RabbitMQ 服务

    RabbitMQ 使用场景一   安装环境 1.下载安装 Erlang 运行时环境 2.下载安装 RabbitMQ Server 应用程序 3.启动 RabbitMQ 服务(默认启动) 4.安装管理平 ...

  6. RabbitMq入门详解

    因为项目中需要用到RabbitMq,所有花时间研究了下,虽然博客园已经有前辈写了关于RabbitMq的文章.但还是有必要研究下! 什么是RabbitMq? 百度解释:MQ全称为Message Queu ...

  7. RabbitMQ的交换器Exchange之direct(发布与订阅 完全匹配)

    1.交换器.用来接收生产者发送的消息并将这些消息路由给服务器中的队列.三种常用的交换器类型,a.direct(发布与订阅 完全匹配).b.fanout(广播).c.topic(主题,规则匹配). 2. ...

  8. 编译安装rabbitmq服务端

    有一种方式是:下载rabbitmq-server-generic-unix压缩包,是不用编译的.是已经编译好的源码了 下面介绍编译源码安装   总括: 需要以下步骤:   1.安装erlange.因为 ...

  9. Github开源:Sheng.RabbitMQ.CommandExecuter (RabbitMQ 的命令模式实现)

    [Github]:https://github.com/iccb1013/Sheng.RabbitMQ.CommandExecuter Sheng.RabbitMQ.CommandExecuter 是 ...

随机推荐

  1. vue权威指南笔记02——对比v-if与v-show

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  2. python第四十九天--paramiko模块安装大作战

    准备开始学习:paramiko模块,发现这个模块十分难搞 安装不上 搞了半天,win10 64下 pytyon 3.6 的 paramiko模块 死活安不上,在网上不断的找资料,可是没有用,没有用啊 ...

  3. 图解get方法与filter方法

    在django的数据库查找方法中,get与filter方法是查找单目数据,用图记录了这两个方法查找数据各自返回的是什么?

  4. 10 种机器学习算法的要点(附 Python 和 R 代码)

    本文由 伯乐在线 - Agatha 翻译,唐尤华 校稿.未经许可,禁止转载!英文出处:SUNIL RAY.欢迎加入翻译组. 前言 谷歌董事长施密特曾说过:虽然谷歌的无人驾驶汽车和机器人受到了许多媒体关 ...

  5. apache配置CA证书通过https通信

    Apache Httpd 2.2 实现https加密通讯 实际生产中CA证书一般是向一些专业认证的国际机构来进行申请的.我们会模拟使用OpenSSL生成的证书,来实现Apache的安全加密通讯,这与实 ...

  6. log4.net 配置-控制台输出带颜色的日志

    一般对控制台输入的日志我们使用的 Appender 为 ConsoleAppender ,日志为白色文字. 当我们想到 DEBUG,INFO,WARN,ERROR  每种日志设置一种颜色时我们需要将  ...

  7. ping 127.0.0.1和ping本地ip分别测试什么?

    ping 127.0.0.1 是你本地的回环地址! 实际上只要是127.0.0.1到127.255.255.255都是回环地址!都是可以PING检查的! 它能ping通,说明你的TCP/IP协议栈没问 ...

  8. system函数的应用

    system函数的两个简单应用 1.调用cmd命令.例:(打开计算器) #include <stdlib.h> int main() { system("calc"); ...

  9. <20180927>新开一篇章记录常用到的IT名词

    (一)有些名词在市场化的今天用的很多,和IT的名词重叠和易混淆, 有些缩写根本连外国人都很少用, 国人却用的津津乐道.这篇是专门用来记录的. 1.1 SMB , 这个在IT领域用的很多, 阐述的是 “ ...

  10. jquery easyui datagrid js获取记录数 页数 当前页

    首先要吐槽的是 easyui竟然找不到未压缩的版本(1 也许它是藏在某个个几角旮旯; 2 压缩的版本想看懂? 大概你得在你脑袋上外接个CPU), 而且官方的文档简陋的不能再简陋了, 想实现个稍微复杂点 ...