生成者就是发送信息,消费者就是接收信息,队列就是存储数据的排队。消息通过你的应用程序和RabbitMQ进行传输,它们只能存储在队列中,队列容量没有限制,你要存储多少消息都可以——基本上是一个无限的缓冲区。多个生产者(producers)能够把消息发送给同一个队列,同样,多个消费者(consumers)也能从同一个队列(queue)中获取数据。
MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们。
RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。RabbitMQ服务器是用Erlang语言编写的,而集群和故障转移是构建在开放电信平台框架上的。所有主要的编程语言均有与代理接口通讯的客户端库。消息传递相较文件传递与远程过程调用(RPC)而言,似乎更胜一筹,因为它具有更好的平台无关性,并能够很好地支持并发与异步调用。对操作的实时性要求不高,而需要执行的任务极为耗时,存在异构系统间的整合等效果更好。使用工作队列的一个好处就是它能够并行的处理队列。如果堆积了很多任务,我们只需要添加更多的消费者(Consuming)就可以了,扩展很简单。

项目说明

> 1. 这是一个ASP.NET Core Web项目,主要展示RabbitMQ的使用
> 2. ReceiveMQ接收消息项目
> 3. SendMQ发送消息项目
> 4. 如果发送的信息很多的时候,可以启动多个消费者(ReceiveMQ)

ReceiveMQ消费者项目

using RabbitMQ.Client;
using RabbitMQ.Client.Events;
using System;
using System.Text;
using System.Threading; /// <summary>
/// 接收信息
/// </summary>
namespace ReceiveMQ
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("销售者开始运行"); var factory = new ConnectionFactory() { HostName = "localhost", Port = , UserName = "test", Password = "test123" };
using (var connection = factory.CreateConnection())
using (var channel = connection.CreateModel())
{
channel.QueueDeclare(queue: "hello",
durable: false,
exclusive: false,
autoDelete: false,
arguments: null); //模拟接受者
var consumer = new EventingBasicConsumer(channel);
consumer.Received += (model, ea) =>
{
var body = ea.Body;
var message = Encoding.UTF8.GetString(body);
Console.WriteLine("接收信息:{0}", message);
}; while (true) { channel.BasicConsume(queue: "hello",
autoAck: true,
consumer: consumer); Thread.Sleep(TimeSpan.FromSeconds());
Console.WriteLine("每隔10秒接收一次");
}
} }
}
}

SendMQ生产者项目

using RabbitMQ.Client;
using System;
using System.Text;
using System.Threading; /// <summary>
/// 发送信息
/// </summary>
namespace SendMQ
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("生产者开始运行"); var factory = new ConnectionFactory() { HostName = "localhost", Port = , UserName = "test", Password = "test123" };
using (var connection = factory.CreateConnection())
using (var channel = connection.CreateModel())
{
channel.QueueDeclare(queue: "hello",
durable: false,
exclusive: false,
autoDelete: false,
arguments: null); //模拟生成者
Random rd = new Random();
while (true)
{
string message = $"你好,{rd.Next(10)}。";
var body = Encoding.UTF8.GetBytes(message); channel.BasicPublish(exchange: "",
routingKey: "hello",
basicProperties: null,
body: body); Console.WriteLine("发送信息:{0}", message); //随机休眠
Thread.Sleep(TimeSpan.FromSeconds(rd.Next()));
}
} }
}
}

运行效果图

docker安装RabbitMQ

设置用户名和密码并且启用管理页面
docker run -d --hostname my-rabbit --name some-rabbit -e RABBITMQ_DEFAULT_USER=user -e RABBITMQ_DEFAULT_PASS=password rabbitmq:3-management

项目源码

https://github.com/jasonhua95/samll-project/tree/master/RabbitMQDemo

其他RabbitMQ的文章

利用开源库实现RabbitMQ,EasyNetQ操作RabbitMQ(高级消息队列),另一种简单的方式操作消息队列。

RabbitMQ的学习的更多相关文章

  1. C#RabbitMQ基础学习笔记

    RabbitMQ基础学习笔记(C#代码示例) 一.定义: MQ是MessageQueue,消息队列的简称(是流行的开源消息队列系统,利用erlang语言开发).MQ是一种应用程序对应用程序的通信方法. ...

  2. Rabbitmq相关学习网址

    1.安装文档: http://www.cnblogs.com/shuzhenyu/p/9823324.html 2.RabbitMq的整理 exchange.route.queue关系 https:/ ...

  3. RabbitMQ巩固学习一

    说起RabbitMQ大家第一时间应该想到的就是异步队列,关于异步队列的话题简直太多了,各位同学在园子里一搜便知.我第一次听异步队列这个名词感觉非常高大上

  4. RabbitMQ小白菜学习之在window下的安装配置

    RabbitMQ安装 首先需要下载RabbitMQ的平台环境Erlang OTP平台和RabbitMQ Server(windows版): OTP 19.1 Windows 64-bit Binary ...

  5. RabbitMQ 应用学习随笔

    1.安装 Rabbit MQ 是建立在强大的Erlang OTP平台上,因此安装RabbitMQ之前要先安装Erlang. erlang:http://www.erlang.org/download. ...

  6. rabbitmq系统学习(三)集群架构

    RabbitMQ集群架构模式 主备模式 实现RabbitMQ的高可用集群,一般在并发和数据量不高的情况下,这种模型非常的好用且简单.主备模式也称为Warren模式 HaProxy配置 listen r ...

  7. rabbitmq系统学习(二)

    Rabbitmq高级整合应用 RabbitMq整合Spring AMQP实战 RabbitAdmin 使用RabbitTemplate的execute方法执行对应操作 rabbitAdmin.decl ...

  8. rabbitmq系统学习(一)

    各种mq activemq,kafka使用zookeeper做管理 rocketmq自己实现nameserver broke管理 AMQP核心概念 高级消息队列协议 publisher applica ...

  9. rabbitmq基础学习+springboot结合rabbitmq实现回调确认confirm

    rabbitmq集群docker快速搭建 https://blog.csdn.net/u011058700/article/details/78708767 rabbitmq原理博客 https:// ...

随机推荐

  1. ubuntu10.04换官方源

    ubuntu10.04LTS官方已经不再维护,导致部分软件.库文件等下载有问题,可换以下源地址解决问题 deb http://old-releases.ubuntu.com/ubuntu lucid ...

  2. JDK最新版 Jmeter最新版

    http://www.oracle.com/technetwork/java/javase/downloads/jdk10-downloads-4416644.html http://jmeter.a ...

  3. C语言解决约瑟夫问题详解的代码

    将开发过程中比较重要的一些内容做个收藏,下面的内容是关于C语言解决约瑟夫问题详解的内容,希望能对码农有帮助. #pragma once #include<vector> class PRO ...

  4. [Vue warn]: Duplicate keys detected: '1'. This may cause an update error

    今天遇到这个问题,遇到这个问题多数因为:key值的问题 第一种情况(key重复) <div class="name-list" v-for="(item,index ...

  5. python-web自动化-Js-日历操作

    日历控件是web网站上经常会遇到的一个场景,有些输入框是可以直接输入日期的,有些不能:以12306网站为例,讲解如何解决日历控件为readonly属性的问题. 基本思路:先用js去掉readonly属 ...

  6. 未能加载文件或程序集“Microsoft.Vbe.Interop, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c”或它的某一个依赖项。系统找不到制定的文件。

    未能加载文件或程序集"Microsoft.Vbe.Interop, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e ...

  7. 内核驱动程序中如何读写user space的文件,方便调试程序

    需要在Linux kernel--大多是在需要调试的驱动程序--中读写文件数据.但是在kernel中操作文件没有标准库可用,需要利用kernel的一些函数,这些函数主要有: filp_open() f ...

  8. resin4.0服务器远程调试说明

    1.开发环境介绍: 目前dev用resin 作为服务容器.服务调用之间过于复杂,要进行本地代码调试过于复杂,甚至无法进行.但是可以通过jvm的远程代码调试来达到本地代码调试的目的,步骤如下. 2.re ...

  9. [TensorFlow]TensorFlow安装方法

    下载*.whl文件方法安装: 方法:http://www.python36.com/install-tensorflow-using-official-pip-pacakage/ 在线安装: 方法:h ...

  10. Shopt命令(删除排除)

    有时候我们需要反选某个文件以外的其他文件,就会用到rm -rf!(file)命令,但是有时候这条命令会报错显示 -bash: !: event not found 解决办法:shopt -s extg ...