大话RabbitMQ 基础入门
----------写在前面----------
近些年微服务越来越火,让我也忍不住想去一窥微服务究竟,讲到微服务,就离不开分布式,而分布式,也离不开消息队列,在消息队列中,RabbitMQ可以说是比较具有代表性的一款。
这里是一篇介绍消息队列以及各种消息队列产品对比的文章,讲得很好,有兴趣的可以看一看。
https://cloud.tencent.com/developer/article/1006035
在讲RabbitMQ之前,首先需要在电脑上安装和配置RabbitMQ,网络上已经有很多这类文章,如果懒得去搜索,可以看看这篇介绍如何安装配置RabbitMQ的文章。
https://blog.csdn.net/weixin_39735923/article/details/79288578
其中,在安装RabbitMQ的过程中,遇到了一个坑,在启用RabbltMQ的管理界面执行
rabbitmq-plugins enable rabbitmq_management
命令时,出现了以下这样的报错

可以在该指令前加上 .\ 即
.\rabbitmq-plugins enable rabbitmq_management
祝安装顺利 !!
-------正文------
基本概念
下面是在.Net中使用RabbitMQ要明白的一些名词概念。
- Producer:消息发送方
- ------------------------------
- Consumer:消息接收方
- --------------------------------
- Connection :程序与RabbitMQ之间的连接,类似连接数据库所用的DbConnection。
- ------------------------------------------------------------------------------------------
- Channel :每个Connection可以有多个Channel,每个Chanel代表一次会话任务。
- ------------------------------------------------------------------------
- Exchange :RabbitMQ传递模型的核心思想是生产者和消费者不直接发生关系,即生产者并不知道消费者的存在,他们之间就是通过Exchange进行消息的分发。
- -------------------------------------------------------------------------------------------------------------------------------------------------------------
- Routing Key:路由关键字是Exchange把消息分发给Queue的规则(消息能否发给Queue的一个判断条件)。
- --------------------------------------------------------------------------------------------------
- Queue:消息队列,Exchange把消息分发给Queue,消费者再从Queue中取数据。
- ------------------------------------------------------------------------------
- Binding:Binding使得Exchange和Queue之间发生联系。
综上所诉,他们之间的关系可以用我下面的 丑图 表示。

在图中,没有吧Routing key画出。Producer每一次发送消息,除了发出消息本身,还会随着消息带上一个routingKey,而且每一次将Exchange和Queue绑定,大体需要三个参数,
string queueName, string exchangeName, string routingKey
其中也有一个routingKey,但此RoutingKey非彼Routingkey。
大白话
对这个过程,我们可以理解为国家给灾区发送救灾物资,国家给当地政府划拨物资的时候,会规定,谁才能拿到这批物资,如(房子倒了的.家里有人受伤了的.家庭经济困难的)。
而当地政府在分配这批物资之前,为了方便物资的分配,会给每个家庭贴上一个标签,如
家庭A 经济困难
家庭B 房子倒了.经济困难
家庭C 家庭富有.房子倒了
家庭D 房子倒了的.家里有人受伤了的.家庭经济困难的
所以,发送消息时候的routingKey就是国家规定的那批物质分配规则。
而Exchange和Queue绑定时的RoutingKey可以理解为当地政府给每个家庭贴上的一个标签。
Exchange(交换机)转发消息的规则也有很多种:direct, topic, headers(不常用) 和 fanout,我们称之为交换类型。
我们可以把Exchange理解为分配这批物质的政府,现在国家规定了宏观的分配方向(发送消息时的routingKey),每个家庭也有了家庭情况的标签(绑定Exchange时的routingKey),但是这个物资具体怎么分,还是当地政府说了算。
Direct 严格按照国家规定来,只有房子倒了的,家里有人受伤了的而且家庭经济困难的才能分到救灾物资。 家庭D能分到
Fanout 只要是灾区的居民都能分到, 不管家庭情况如何。 家庭A\B\C\D都能分到
Topic 主题匹配: 只要家庭情况在国家规定分配规则内的,都能分到物资,但是家庭C分不到,因为他家太有钱了,这个条件不在国家的分配规则里。家庭A\B\D能分到
所以,我们在声明一个Exchange(交换机)的同时,还要指定该交换机的类型,即(当地政府怎么来分救灾物资)
其实,用这个例子,我是想说,生产者和消费者之间,就像国家与难民之间一样,国家只知道,我要帮助难民,但是难民有谁,物资能不能分到难民手里,还得当地政府说了算,你就说我这个例子恰不恰当吧!哈哈
大话RabbitMQ 基础入门的更多相关文章
- ASP.NET Core消息队列RabbitMQ基础入门实战演练
一.课程介绍 人生苦短,我用.NET Core!消息队列RabbitMQ大家相比都不陌生,本次分享课程阿笨将给大家分享一下在一般项目中99%都会用到的消息队列MQ的一个实战业务运用场景.本次分享课程不 ...
- C# 消息队列之 RabbitMQ 基础入门
Ø 简介 C# 实现消息队列的方式有很多种,比如:MSMQ.RabbitMQ.EQueue 等,本文主要介绍使用 RabbitMQ 实现消息队列的基础入门.包括如下内容: 1. 什么是消息队列? ...
- RabbitMQ基础入门篇
下载安装 Erlang RabbitMQ 启动RabbitMQ管理平台插件 DOS下进入到安装目录\sbin,执行以下命令 rabbitmq-plugins enable rabbitmq_manag ...
- RabbitMQ基础入门
RabbitMQ是一个消息中间件,在一些需要异步处理.发布/订阅等场景的时候,使用RabbitMQ可以完成我们的需求. 下面是我在学习java语言实现RabbitMQ(自RabbitMQ官网的Tuto ...
- rabbitmq(一)-基础入门
原文地址:https://www.jianshu.com/p/e186a7fce8cc 在学东西之前,我们先有一个方法论,知道如何学习.学习一个东西一般都遵循以下几个环节: xxx是什么,诞生的原因, ...
- RabbitMQ,Apache的ActiveMQ,阿里RocketMQ,Kafka,ZeroMQ,MetaMQ,Redis也可实现消息队列,RabbitMQ的应用场景以及基本原理介绍,RabbitMQ基础知识详解,RabbitMQ布曙
消息队列及常见消息队列介绍 2017-10-10 09:35操作系统/客户端/人脸识别 一.消息队列(MQ)概述 消息队列(Message Queue),是分布式系统中重要的组件,其通用的使用场景可以 ...
- Rabbit MQ 基础入门
Rabbit MQ 学习(一)基础入门 简介 RabbitMQ 简介 为什么选择 RabbitMQ RabbitMQ 的模型架构是什么? AMQP 协议是什么? AMQP 常用命令 概念 生产者和消费 ...
- SpringCloudStream学习(一)RabbitMQ基础
应公司大佬要求,学习一下SpringCloudStream,作为技术储备.这几天也看了这方面的资料,现在写一篇笔记,以做总结.文章会从RabbitMQ基础讲起,到SpringCloudStream结束 ...
- RabbitMQ由浅入深入门全总结(一)
写在最前面 距离上一次发文章已经很久了,其实这段时间一直也没有停笔,只不过在忙着找工作还有学校结课的事情,重新弄了一下博客,后面也会陆陆续续会把文章最近更新出来~ 这篇文章有点长,就分了两篇Q PS: ...
随机推荐
- bulk-load 装载HDFS数据到HBase
bulk-load的作用是用mapreduce的方式将hdfs上的文件装载到hbase中,对于海量数据装载入hbase非常有用,参考http://hbase.apache.org/docs/r0.89 ...
- obj-c利用dispatch库并发示例
我们首先写一个纯C的程序,代码的功能为显示指定范围整数中素数的个数: #include <stdio.h> #include <stdlib.h> #include <s ...
- SharePoint2007 开发部署Application Pages
介绍:SharePoint应用程序页,也就是_layouts路径下的aspx页面,服务器C:\Program Files\Common Files\Microsoft Shared\web serve ...
- 双系统或三系统:Grub Rescue修复方法
我是在装三系统的时候(1.WIN 7 ,2.Ubuntu 12.04 ,3.CentOS 6.4 ),中间步骤出错,造成引导区覆盖,grub乱掉了. 症状: 开机显示:GRUB loading err ...
- 我的摸索过程之IIS下配置asp.net 的注意事项
"在应用程序级别之外使用注册为 allowDefinition='MachineToApplication' 的节是错误的.如果在 IIS 中没有将虚拟目录配置为应用程序,则可能导致此错误. ...
- Salesforce Lightning开发学习(二)Component组件开发实践
lightning的组件区分标准组件.自定义组件和AppExchange组件.标准组件由SF提供,自定义组件由developer自行开发,AppExchange组件由合作伙伴建立.下面我们写一个简单的 ...
- Java 必看的 Spring 知识汇总!有比这更全的算我输!
往 期 精 彩 推 荐 [1]Java Web技术经验总结 [2]15个顶级Java多线程面试题及答案,快来看看吧 [3]面试官最喜欢问的十道java面试题 [4]从零讲JAVA ,给你一条清晰 ...
- GitHub awesome Resource
各种Awesome技术资源的资源聚合: https://github.com/sindresorhus/awesome Contents Platforms Programming Languages ...
- JDBC连接数据库时候出错
错误提示如下: Fri May 13 09:06:04 CST 2016 WARN: Establishing SSL connection without server's identity ver ...
- 微信公众号网页授权登录--JAVA
网上搜资料时,网友都说官方文档太垃圾了不易看懂,如何如何的.现在个人整理了一个通俗易懂易上手的,希望可以帮助到刚接触微信接口的你. 请看流程图!看懂图,就懂了一半了: 其实整体流程大体只需三步:用户点 ...