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)

java学习-消息队列rabbitmq的组成的更多相关文章

  1. (一)RabbitMQ消息队列-RabbitMQ的优劣势及产生背景

    原文:(一)RabbitMQ消息队列-RabbitMQ的优劣势及产生背景 本篇并没有直接讲到技术,例如没有先写个Helloword.我想在选择了解或者学习一门技术之前先要明白为什么要现在这个技术而不是 ...

  2. ASP.NET Core消息队列RabbitMQ基础入门实战演练

    一.课程介绍 人生苦短,我用.NET Core!消息队列RabbitMQ大家相比都不陌生,本次分享课程阿笨将给大家分享一下在一般项目中99%都会用到的消息队列MQ的一个实战业务运用场景.本次分享课程不 ...

  3. 消息队列rabbitmq/kafka

    12.1 rabbitMQ 1. 你了解的消息队列 rabbitmq是一个消息代理,它接收和转发消息,可以理解为是生活的邮局.你可以将邮件放在邮箱里,你可以确定有邮递员会发送邮件给收件人.概括:rab ...

  4. 消息队列rabbitmq rabbitMQ安装

    消息队列rabbitmq   12.1 rabbitMQ 1. 你了解的消息队列 生活里的消息队列,如同邮局的邮箱, 如果没邮箱的话, 邮件必须找到邮件那个人,递给他,才玩完成,那这个任务会处理的很麻 ...

  5. .NET 开源工作流: Slickflow流程引擎高级开发(七)--消息队列(RabbitMQ)的集成使用

    前言:工作流流程过程中,除了正常的人工审批类型的节点外,事件类型的节点处理也尤为重要.比如比较常见的事件类型的节点有:Timer/Message/Signal等.本文重点阐述消息类型的节点处理,以及实 ...

  6. openstack (共享服务) 消息队列rabbitmq服务

    云计算openstack共享组件——消息队列rabbitmq(3)   一.MQ 全称为 Message Queue, 消息队列( MQ ) 是一种应用程序对应用程序的通信方法.应用程序通过读写出入队 ...

  7. C#中使用消息队列RabbitMQ

    在C#中使用消息队列RabbitMQ 2014-10-27 14:41 by qy1141, 745 阅读, 2 评论, 收藏, 编辑 1.什么是RabbitMQ.详见 http://www.rabb ...

  8. node使用消息队列RabbitMQ一

    基础发布和订阅 消息队列RabbitMQ使用 1 安装RabbitMQ服务器 安装erlang服务 下载地址 http://www.erlang.org/downloads 安装RabbitMQ 下载 ...

  9. 消息队列--RabbitMQ(一)

    1.消息队列概述 可以理解为保存消息的一个媒介/或者是个容器,与之相关有两个概念(即生产者(Publish)与消费者(Consumer)).所谓生产者,就是生产创造消息的一方,那么,消费者便是从队列中 ...

随机推荐

  1. node.js中通过dgram数据报模块创建UDP服务器和客户端

    node.js中 dgram 模块提供了udp数据包的socket实现,可以方便的创建udp服务器和客户端. 一.创建UDP服务器和客户端 服务端: const dgram = require('dg ...

  2. CSS的六大选择器

    选择器:选择器是一种模式,用于选择需要添加样式的元素. 首先简述六大选择器 基本选择器 标签选择器 类选择器 ID选择器 高级选择器 层次选择器 结构伪类选择器 属性选择器 其中基本选择器与层次选择器 ...

  3. FTP服务与配置

    FTP简介 网络文件共享服务主流的主要有三种,分别是ftp.nfs.samba. FTP是File Transfer Protocol(文件传输协议)的简称,用于internet上的控制文件的双向传输 ...

  4. MD5=======RBAC权限管理

    经过网上查阅相关的说明原来,MD5全名Message-Digest Algorithm 5(信息-摘要算法)是一种不可逆的加密算法. MD5为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性 ...

  5. 在excel中如何利用vba通过网址读取网页title(网址是https的)?

    昨天在百度知道上提了这个问题,我保存了些百度知道我回答的网址,想利用excel直接读取出网址的title,请问vba代码怎么写?(要支持https的) excel大神帮我回答了,在这记录下: Func ...

  6. Maths | 相关接收机与最大似然准则

    目录 一. 接收机的概念 1.信号解调器 2.检测器 二. 相关解调器的解调过程及其原理 1.构造相关解调器 2.得到接收信号在基向量上的投影 3.相关器输出的性质 三.检测器的实现及其数学原理 1. ...

  7. Beta阶段Scrum 冲刺博客合集

    Beta阶段博客链接集合 第一篇Scrum冲刺博客 第二篇Scrum冲刺博客-Day1 第三篇Scrum冲刺博客-Day2 第四篇Scrum冲刺博客-Day3 第五篇Scrum冲刺博客-Day4 第六 ...

  8. Awake()跟Start()差在哪?

    刚开始学Unity的时候,最难搞定的就是这两个functions的差异,依照官方文件所描述的: Awake(): Awake is called when the script instance is ...

  9. react中使用vw + antd-mobile进行移动端布局

    首先create-react-app react-vw一顿简单操作生成个demo 1.cnpm run eject 暴露config文件,再cnpm run start报错 (报错...  Canno ...

  10. CTFcrackTools-V3 - 一款旨在帮助 CTFer 在 CTF 中发挥作用的一个框架

    CTFcrackTools-V3 CTFcrackTools重置版 作者:米斯特安全-林晨.摇摆.奶权 米斯特安全团队首页:http://www.hi-ourlife.com/ 部分插件来源:希望团队 ...