目录

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. python-Tkinter整理总结

    笔者学习Tkinter模块也有好久时间了,现将学习的做以整理. tkinter简介(一) tkinter中lable标签控件(二) tkinter中button按钮控件(三) tkinter中entr ...

  2. 洗礼灵魂,修炼python(37)--面向对象编程(7)—了解魔法方法

    也许上一篇博文提到的property内置函数的用法你还觉得记忆犹新,那么有没有更多的类似的方法呢?有的,就是本篇文章要说的魔法方法 魔法方法 1.什么是魔法方法 (其实前面已经提到多次,每次我都是说暂 ...

  3. 洗礼灵魂,修炼python(13)--模块random,math,pickle

    random 1.作用: random模块用于生成随机数 2.常用函数: random:用于生成一个0到1的随机符点数: 0 <= n < 1.0 uniform(a, b):用于生成一个 ...

  4. Spring 12 种 常用注解!

    1.声明bean的注解 @Component 组件,没有明确的角色 @Service 在业务逻辑层使用(service层) @Repository 在数据访问层使用(dao层) @Controller ...

  5. EntityFramework Code-First 简易教程(八)-------一对一

    配置一对一(One-to-One)关系: 两个实体中,如果一个实体的一个实例与另一个实体相关,则我们就叫做一对一关系 查看如下代码: public class Student { public Stu ...

  6. awk实战演示

    awk:报告生成器,格式化文本输出. 我们一般使用的awk命令其实就是gawk,在centos7系统下,awk是gawk的链接文件. 基本用法:gawk [options] 'program'  FI ...

  7. @property括号内属性讲解

    一.前言      一个object的属性允许其他object监督和改变他的状态.但是在一个设计良好的面向对象程序中,直接访问一个object的内部状态是不可能的.相反,存取器(getter sett ...

  8. 基于CoreText的基础排版引擎之不带图片的排版引擎

    - (void)drawRect:(CGRect)rect { [super drawRect:rect]; //步骤一:得到当前绘制画布上下文,用于后续将内容绘制在画布上 CGContextRef ...

  9. vue项目的架构设计完善详解

    vue项目构建vuex+mock层 vue项目添加jsBridge(与原生交互的) vue项目添加代码格式化

  10. openssl windows 生成公钥与私钥

    链接: https://pan.baidu.com/s/1qn-qeFxovor-vcAWFl8jIw 提取码: zy5v 一,下载安装windows平台openssl密钥生成工具,执行安装目录bin ...