博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java学习-消息队列rabbitmq的组成
阅读量:4921 次
发布时间:2019-06-11

本文共 1839 字,大约阅读时间需要 6 分钟。

rabbitMQ组成部分

rabbitmq有以下组成部分,分别为:

1. Server(broker)

接受客户端连接,实现AMQP消息队列和路由功能的进程

2.虚拟主机virtual host

虚拟主机类似于权限控制组,控制用户访问虚拟主机的权限。
权限控制最小的粒度是virtual host

3. 交换机exchange

交换机相当于一个具有独立进程的应用程序
接受生产者发送的消息,并根据Binding规则将消息路由给服务器中队列。
它具有一个路由表,即以key路由键-value路由,形式存储的表

4. 消息队列queue

队列,也就是存放消息的容器,遵循先进先出的规则

5. 消息Message

由Header和Body组成,Header是生产者添加的各种属性的集合,包括消息被那个Message Queue接受,优先级等属性,
body是需要传输的数据

6. 绑定binding,也叫路由规则

联系Exchange和Message Queue

7. connection连接

客户端与RabbitMQ server(broker)之间的TCP连接

8. Channel信道

客户端与broker在TCP连接后,需要为Connection创建Channel,AMQP协议规定只有Channel才能执行AMQP的命令。
一个Connection对多个Channel。建议客户端线程之间不要共用Channel,
至少要保证共用的Channel的线程发送消息必须是串行的,建议尽量共用Connection

9. AMQP命令

客户端通过Command命令完成与AMQP服务器的交互来实现自身的逻辑。
如通过publish命令发送消息,txSelect开启一个事务,txCommit提交一个事务。

note:

Exchange和多个Message Queue发生binding后形成一张路由表
当Exchange接收到Message时会解析其Header得到Routing Key,
Exchange根据Routing Key与Exchange Type将Message路由到Message Queue

Binding key由消费者在绑定Exchange和Message Queue时指定

Routing Key由Producer发送Message时指定,两者匹配方式由Exchange Type决定

ExchangeType三种类型:

三种类型分别为:

1. direct直接交换机

将交换机和队列进行绑定,当生产者producer发送消息到队列时,通过消息header中携带的Routing Key与队列进行匹配再放到队列中。

允许队列与交换机绑定的键名相同,即下图都是键一时,生产者生产的消息会同时发送到队列一和队列二。

 

2. Fanout广播式交换机

交换机与队列进行绑定,没有路由key,只要队列跟交换机绑定,生产者发布的消息会发不到所有队列中

 

3. Topic主题式交换机

与Direct直接交换类似,队列与交换机绑定的key方式使用模式匹配方式绑定

绑定的关键字(key)用另个或多个标记构成,每个标记之间用"."间隔

*号匹配一个词组,#号匹配零个或多个词组

上面三种交换模式,个人觉得第一种direct直接交换方式比较好用。

AMQP协议栈:

1. Module Layer
定义了一些供客户端调用的命令,客户端可以利用这些命令实现自己的业务逻辑,
例如,客户端可以通过queue.declare声明一个队列,利用consume命令获取一个队列中的消息。

2. Session Layer

主要负责将客户端的命令发送给服务器,在将服务器端的应答返回给客户端
主要为客户端与服务器之间通信提供可靠性、同步机制和错误处理。

3.Transport Layer

主要传输二进制数据流,提供帧的处理、信道复用、错误检测和数据表示。

 

参考资料来源:

RabbitMQ的几种典型使用场景(https://www.cnblogs.com/luxiaoxun/p/3918054.html)

RabbitMQ的组成、原理、安装、和eclipse的整合(https://blog.csdn.net/hongye301/article/details/85042781)

转载于:https://www.cnblogs.com/gne-hwz/p/10717473.html

你可能感兴趣的文章
SQL 行转列
查看>>
对CSS中的Position、Float属性的一些深入探讨
查看>>
前端UI
查看>>
喵哈哈村的括号序列
查看>>
把excel数据导入mysql中
查看>>
linux内核——进程切换宏switch_to
查看>>
后面需要继续完善的地方
查看>>
SQL Server 用链接服务器 同步SqlServer与MySQL
查看>>
外星人入侵
查看>>
单调栈
查看>>
zepto源码--核心方法2(class相关)--学习笔记
查看>>
将16进制的颜色转为rgb颜色
查看>>
POJ 2182 Lost Cows (树状数组 && 二分查找)
查看>>
Matlab中界面和注释---中英文切换问题
查看>>
主板维修技术
查看>>
PHP实现四种基本排序算法
查看>>
企业级应用,如何实现服务化四(基础环境准备)
查看>>
Code::Blocks
查看>>
CBitmap,HBitmap,Bitmap区别及联系
查看>>
debian 系统备份
查看>>