mq之 rabbitmq

简介: 

 rabbitmq是基于erlang语言开发的amqp的开源实现。

  通过持久化,传输确认,发布确认来确保可靠性。

  在消息进入队列之前,通过exchange来路由消息,对于典型的路由功能,提供一些内置的exchange来实现,复杂的功能 将多个exchange绑定到一起,也可以使用插件实现。确保灵活的物流。

  多个mq服务器组成一个集群,形成一个逻辑broker。确保消息集群。

  队列可以在集群中的机器上进行镜像 是的在部分节点出问题的情况下  队列仍然可用。确保高可用性。

  mq支持多种消息队列协议,eg mqtt,stomp。

  支持多语言 eg java .net ruby

  易用的管理页面

  消息异常,mq提供了消息跟踪机制。

  可以编写自己的插件。

broker :

  broker是一个或多个的 erlang node的逻辑分组 且node上运行着mq的应用程序。

  cluster 是在broker的基础上 增加了node之间共享元数据的约束。

vhost:

  可以理解为虚拟broker 即mini rabbitmq server。其拥有独立的权限系统,可以做到vhost范围内的用户控制。从全局角度,vhost可以作为不同权限隔离的手段。

元数据:

  在非cluster模式下,元数据主要分为 queue元数据 exchange元数据 binding元数据 vhost 元数据 。

  在cluster模式下,还包括cluster中node位置信息和node关系信息,

channel exchange queue

  queue有自己的进程

  exchange内部实现为保存binding关系的查找表

  channel是实际进行理由工作的实体,即负责按照routing_key 将message投递给queue

  channel是真实tcp连接之上的虚拟连接,所有amqp名利都是通过channel发送的 且channel有唯一的id

  一个channel只能被单独一个操作系统线程使用,所以 投递到特定channel上的message都是有顺序的。但一个操作系统的线程上允许使用多个channel。

  channel为0的channel 用于处理 当前connection全局有效的帧 而 1-65535号channel用于处理特定channel相关的帧。

  amqp协议给出的channel模型:其中每一个channel运行在一个独立的线程上  多个线程共享同一个socket。

消息基于什么传输

  由于tcp连接的创建和销毁的开销很大,且并发数受到系统资源限制,会造成性能瓶颈。mq使用信道的方式来传输数据。信道是建立在真实的tcp连接内的虚拟连接,且每条tcp连接上的信道数量没有限制。

一个queue中存放的message是否有数量限制

  可以认为是没有限制的 取决于机器的内存,但是消息过多会导致处理效率的下降。

如何确保消息正确的发送至mq

    

猜你喜欢

转载自www.cnblogs.com/watchdogzhb/p/10695061.html