消息列队不做过多解释了,直接讲讲rabbitmq的基本概念和路由模式。

一、安装及基本概念

rabbitmq是基于erlang编写的,所以安装rabbitmq之前需要安装erlang的环境,配置环境变量,百度即可。

connectionFactory、connection、channel不做过多介绍,基本步骤为

1.初始化连接工厂
2.从连接工厂获取连接
3.在连接中打开一个通道
4.在通道中声明交换机
5.在通道中声明一个列队(或多个)
6.绑定列队到交换机
7.进行相关操作

二、工作模式(路由模式)

生产者--消费者模式基本的模式是生产者生成消息,投入到列队中,需要的消费者(订阅)去列队拿消息进行处理。

rabbitmq在这里进行了一个中间处理,消息投递给哪个列队由路由器或者称交换机(Exchange)来处理,即生产者不直接将消息投递到列队中,而是投递到交换机,具体要投递到哪个列队,由交换机根据路由规则来确定。

类似于寄信,寄送人不直接将信件投递到派件员手中,而是投递到邮局,邮局根据信件的地址来决定到送到哪位派件员手上,进而送达收件人。这也是rabbitmq的一个特点和强大之处。

所以,rabbitmq的工作模式就是producer将消息投递到特定的exchange,queue按routing key订阅消息(例如,列队A订阅了交换机E的路由键为test的消息,那么一个生产者投递两个消息到E中两个消息,routing key分别为test和test2,那么A列队的只能收到路由键为test的消息),符合路由键的消息将被分发到具体的列队中。

交换机常用的路由方式有四种,fanout、direct、topic、header。header用的较少,自己也没用过,不做介绍了。

1.fanout是简单地将消息分发给所有列队,如图

列队1和列队2均能拿到两个消息(message、message2)

2.direct是根据路由键直接分发,如图:

如存在交换机E,列队1和列队2绑定到交换机的routing key分别为boys和girls。现在一个生产者分别按照routing key为boys和girls投递了消息message和message2,那么列队1中会得到message,列队2或得到message2。

3.topic可以说是是direct的扩展,引入了匹配模式,路由规则如下

生产者投递上述三个消息,则列队1拿到message和message3,列队2拿到message2和message3,列队3三个消息均能拿到。

三、实例

下面是本人在GitHub上面rabbitmq的demo:

入门级实例 https://github.com/littlechaser/rabbitmq.git

与springMVC整合 https://github.com/littlechaser/SpringRabbitMQ.git

与springMVC整合的项目发送消息调接口可使用火狐浏览器插件RestClient、谷歌浏览器插件postman等。(postman需要FQ下载)

RabbitMQ使用介绍及实例的更多相关文章

  1. .Net RabbitMQ实战指南——RabbitMQ相关概念介绍

    什么是消息中间件 消息(Message)是指在应用间传送的数据.消息可以非常简单,比如只包含文本字符串.JSON等,也可以很复杂,比如内嵌对象. 消息队列中间件(Message Queue Middl ...

  2. Json.Net系列教程 1.Json.Net介绍及实例

    原文 Json.Net系列教程 1.Json.Net介绍及实例 本系列教程假设读者已经对Json有一定的了解,关于Json在这里不多说.本系列教程希望能对读者开发涉及到Json的.Net项目有一定的帮 ...

  3. Thinkphp框架拓展包使用方式详细介绍--验证码实例(十一)

    原文:Thinkphp框架拓展包使用方式详细介绍--验证码实例(十一) 拓展压缩包的使用方式详细介绍 1:将拓展包解压:ThinkPHP3.1.2_Extend.zip   --> 将其下的 \ ...

  4. redis锁机制介绍与实例

    转自:https://m.jb51.net/article/154421.htm 今天小编就为大家分享一篇关于redis锁机制介绍与实例,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要 ...

  5. Linux守护进程简单介绍和实例具体解释

    Linux守护进程简单介绍和实例具体解释 简单介绍 守护进程(Daemon)是执行在后台的一种特殊进程.它独立于控制终端而且周期性地执行某种任务或等待处理某些发生的事件.守护进程是一种非常实用的进程. ...

  6. Tstrings类简单介绍及实例

    用TStrings保存文件;var  S: TStrings;begin  S := TStringList.Create();  { ... }  S.SaveToFile('config.txt' ...

  7. RabbitMQ的介绍与spring整合

    本文主要讲述的是个人参考官网及其他前辈博客,对RabbitMQ的一些理解与spring整个RabbitMQ. 一.RabbitMQ的介绍 1.1.什么是RabbitMQ RabbitMQ是一个由erl ...

  8. js cookie介绍和实例(用于自动登录,记住用户名等)

    js cookie介绍和实例(用于自动登录,记住用户名等) 一.总结 1.cookie在客户端:因为js是最初是用来在客户端和服务器端进行通信使用的,所以客户端比如js可以操作cookie正常 2.c ...

  9. .NET 云原生架构师训练营(模块二 基础巩固 RabbitMQ Masstransit 介绍)--学习笔记

    2.6.6 RabbitMQ -- Masstransit 介绍 Masstransit 是什么 Quickstart 消息 Message Masstransit 是什么 Masstransit 是 ...

随机推荐

  1. CFRunLoop 源码学习笔记(CF-1151.16)

    1.CFRunLoopModeRef 什么时候创建的? 在调用__CFRunLoopFindMode(rl, modeName, create) 1.1)首先通过modeName 在RunLoop 中 ...

  2. PHP 7.3: "continue" targeting switch is equivalent to "break". Did you mean to use "continue 2"? · Issue #4037 · aces/Loris

    PHP 7.3: "continue" targeting switch is equivalent to "break". Did you mean to u ...

  3. 使用addeventlistener为js动态创建的元素添加事件监听

    点击li弹出内容,并且动态添加li之后有效 <button onclick="addFunction()">点我增加</button> <ul> ...

  4. 点火开关分为4个档位,分别是off,acc,IG-on,和ST

    off全车除了常火(如应急灯,时钟等的记忆功能)外,均不供电.acc 是附件档,部分车载附属设备供电,如视听系统,仪表灯,灯光等.也就是说,车停在哪里,发动机不转,除了空调不能用外,车内的设备基本都可 ...

  5. Hdu1241 Oil Deposits (DFS)

    Problem Description The GeoSurvComp geologic survey company is responsible for detecting underground ...

  6. 剑指offer(23)二叉搜索树的后序遍历序列

    题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. 题目分析 1.后续遍历我们可以知道,最右边的是根节 ...

  7. Win32汇编学习(9):窗口控件

    这次我们将探讨控件,这些控件是我们程序主要的输入输出设备. 理论: WINDOWS 提供了几个预定义的窗口类以方便我们的使用.大多数时间内,我们把它们用在对话框中,所以我们一般就它们叫做子窗口控件.子 ...

  8. Learning-Python【7】:Python数据类型(3)—— 字典、集合

    一.字典类型 1.用途:用来存放多个不同种类的值 2.定义方式:在{ }内用逗号分隔开多个key:value的元素,其中value可以是任意数据类型,而key的功能通常是用来描述value的,所以ke ...

  9. Learning-Python【25】:绑定方法与非绑定方法

    类中定义函数分为了两大类,绑定方法与非绑定方法,它们有一些特殊之处: 1.绑定方法特殊之处:绑定给谁就应该由谁来调用,谁来调用就会将谁当做第一个参数自动传入 绑定给对象的方法:这个在面向对象第一篇第六 ...

  10. 聚合函数与F/Q表达式

    聚合函数 取名: field + __ + 聚合函数名字 ,如:price__avg:可传关键字参数修改名字:avg=Avg("price"): aggregate:不会返回一个  ...