消息列队不做过多解释了,直接讲讲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下载)

最新文章

  1. <JavaScript语言精粹>--<读书笔记三>之replace()与正则
  2. Composer Player 属性设置
  3. MySQL ERROR 1005: Can't create table (errno: 150)的错误解决办法
  4. mysql创建用户及授权相关命令
  5. WC2015 酱油记
  6. Android优化——UI优化(四) 使用stytle
  7. PHP操作FTP类 (上传下载移动创建等)
  8. Sql Server + ADO.NET
  9. jquery.tagsinput的使用例子,包括模糊查询后端代码
  10. MariaDB扩展特性--虚拟列
  11. db2常用语句
  12. Scania SDP3 2.38.2.37.0 Download, Install, Activate: Confirmed
  13. Spring Boot REST(一)核心接口
  14. (译) 在AngularJS中使用的表单验证功能【转】
  15. 关闭Pycharm拼写检查
  16. is not on any development teams
  17. C#计算机性能参数
  18. Silverlight 图表控件 Visifire 常用属性
  19. k8s常用命令记录
  20. Linux/Unix 下自制番茄钟

热门文章

  1. db2空值、null
  2. GDScript 格式化字符串
  3. Tomcat增加Context配置不带项目名访问导致启动的时候项目加载两次
  4. 泛型-----键值对----映射 hashmap--entry中key value 链表
  5. 将Bdd100k数据集转为CoCo数据集
  6. URIError: Failed to decode param '/%PUBLIC_URL%/favicon.ico'
  7. 解决apache httpd列出目录列表中文乱码问题
  8. VS2015 scanf 函数报错 error C4996: 'scanf'
  9. FL Studio的模式剪辑是什么?
  10. CEF 跨域访问iframe