一、安装RabbitMQ

安装直接用docker安装,如果手动安装的话比较繁琐,还要安装erlang语言的环境。在安装有docker机器上执行官网提供的指令(https://www.rabbitmq.com/download.html):docker run -it --rm --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3-management

安装好之后 浏览器访问15672端口,可以看到web管理端。默认的是用户名密码都是guest

 二、AMQP协议(Advanced message queue protocol 高级消息队列协议)核心概念和RabbitMQ整体架构

RabbitMQ是通过Erlang语言基于AMQP协议开发的。erlang语言常用于交换机上,因为它的高效,自然rabbitMQ也很高效了。

AMQP模型描述了一套模块化的组件以及这些组件之间进行连接的标准规则,核心概念:
server:服务,又称broker,接受客户端连接,对外提供amqp实体服务

connection:连接,客户端与server的连接
channel:网络通道,几乎所有的操作都是在channel中进行的,是进行消息对象的通道,客户端可以建立多个通道,每一个channel表示一个会话任务

virtual host:虚拟主机,是一个逻辑上的概念,一个虚拟主机中可以包含多个exhange 和 message queue但是一个虚拟主机中不能有名称相同的exchange 和 message queue
 
exchange:接收发布应用程序发送的消息,并根据一定的规则将这些消息路由到消息队列
 
message queue:消息队列,存储消息,直到这些消息被消费者安全处理完为止
 
binding:定义了exchange和message queue之间的关联,提供路由规则,包含route_key
 
route_key:路由key ,作用是在交换机上通过route_key来把消息路由到某个队列上
 
RabbitMQ整体架构:
 

这些概念在rabbitMQ的web控制台都可以看见:

三、交换机详解
1.交换机属性:
name:交换机名字
type:类型:direct,topic,fanout,headers
durability:是否需要持久化

autodelete: 假如没有队列绑定到该交换机,那么该交换机会自动删除
Internal: 当前交换机是否用户rabbitmq内部使用不常用,默认为false
argurements: 扩展参数,用户扩展AMQP定制化协议
 
2.直连交换机:direct exchange  消息投递时的key与队列绑定routekey完全相同的队列上面
 
3.主题交换机:topic exchange 投递消息是可以进行key的匹配,#匹配多个单词,*匹配一个单词(用.隔开),比如队列A绑定的routekey:study.#。投递消息时设置的routekey.abc或者routekey.abc.def都可以投递到队列A上面;队列B设置的routekey:study.*,那么就只有routekey.abc可以投递到队列B
 
4.扇形交换机: fanout exchange 不会进行routekey的匹配,只要是该交换机的队列都会被投递。因为不会进行路由字符串的匹配,所以这种交换的消息投递是最快的
 
5.头部交换机:headers exchange  投递的消息头里面有一个特殊的key:“x-match”,有两个值:all(默认),发送消息的header里面的所有key都对应,才投递;any,任意一个对应就投递
 
 
 

最新文章

  1. 安卓奇葩问题之:运行OK,打包安装崩溃(原因是:代码不规范导致编译出错)
  2. 神奇的Bank系统之旅哦
  3. SO从 \u 这样的字符串 构建对象
  4. 帝国cms 灵动标签
  5. hdu 5183 Negative and Positive (NP)
  6. NAMESPACE_ERR: An attempt is made to create or change an object in a way which is incorrect with regard to namespaces.
  7. 【Hybrid App】一个产品经理眼中的PhoneGap Vs. AppCan
  8. hdu 3709 数字dp(小思)
  9. .NET 实现DES加密解密处理
  10. s5pv210 的启动
  11. Java集合必会14问(精选面试题整理)
  12. npm、cnpm、yarn 安装删除异同
  13. [Go] golang的接口合约
  14. 如何在eclipse添加SVN菜单
  15. supervisord.conf
  16. 面试01:解释内存中的栈(stack)、堆(heap)和方法区(method area)的用法
  17. luogu1541 乌龟棋 (dp)
  18. HDU 1711:Number Sequence(KMP模板,求位置)
  19. HTML中块级元素与内联元素有什么区别 ?
  20. 朴素贝叶斯文本分类实现 python cherry分类器

热门文章

  1. C# 对 TCP 客户端的状态封装
  2. XML--XML作用
  3. VMware的安装与部署Linux系统
  4. Android P HIDL demo代码编写 (原创)
  5. Dynamics 9.0 安装好后 公告出现 提示:出现错误。 请稍等片刻,然后重试。 如果问题仍然存在,请与管理员联系。
  6. 【Hadoop离线基础总结】完全分布式环境搭建
  7. 【FreeRTOS实战汇总】小白博主的RTOS学习实战快速进阶之路(持续更新)
  8. properties文件导出
  9. springboot启动报错:Handler dispatch failed; nested exception is java.lang.AbstractMethodError
  10. 设计模式之GOF23享元模式