高并发系统缓存之利器-RabbitMQ

  • 高并发系统缓存之利器-RabbitMQ已关闭评论
  • 115,114 views
  • A+
所属分类:未分类

简介

用Erlang写成的消息中间件。支持开放的高级消息队列协议(AMQP,Advanced Message Queuing Protocol),从根本上避免了生产厂商的封闭,使用任何语言的各种客户都可以从中受益。这种协议提供了相当复杂的消息传输模式,所以基本上不需要MassTransit或NServiceBus的配合

AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。
AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。
RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。

几种常见的队列比较:

1 集群, activemq和rabbitmq支持

2 同步异步,activemq和rabbitmq支持

3 持久存储,zeromq不支持

4 点对点和发布订阅模式,都支持

5 稳定性 zeromq <activemq <rabbitmq

6 时效性 zeromq <activemq <RocketMQ <rabbitmq

下图显示的是发送和接受的每秒钟的消息数。整个过程共产生1百万条1K的消息

高并发系统缓存之利器-RabbitMQ

 

架构

高并发系统缓存之利器-RabbitMQ

RabbitMQ-相关概念介绍

Broker:简单来说就是消息队列服务器实体。
      Exchange:消息交换机,它指定消息按什么规则,路由到哪个队列。
      Queue:消息队列载体,每个消息都会被投入到一个或多个队列。
      Binding:绑定,它的作用就是把exchange和queue按照路由规则绑定起来。
      Routing Key:路由关键字,exchange根据这个关键字进行消息投递。

vhost:虚拟主机,一个broker里可以开设多个vhost,用作不同用户的权限分离。
       producer:消息生产者,就是投递消息的程序。
       consumer:消息消费者,就是接受消息的程序。
       channel:消息通道,在客户端的每个连接里,可建立多个channel,每个channel代表一个会话任务。

RabbitMQ-exchange介绍

Exchange有四种类型:fanout,direct,topic,headers

fanout:是一种广播形式

direct:是直接投递的形式

topic:是模式匹配的形式。

headers:它根据应用程序消息的特定属性进行匹配,这些消息可能在binding key中标记为可选或者必选

高并发系统缓存之利器-RabbitMQ

高并发系统缓存之利器-RabbitMQ

高并发系统缓存之利器-RabbitMQ

高并发系统缓存之利器-RabbitMQ

高并发系统缓存之利器-RabbitMQ

高并发系统缓存之利器-RabbitMQ

RabbitMQ其它功能-持久化


(1)exchange持久化,在声明时指定durable => 1
(2)queue持久化,在声明时指定durable => 1
(3)消息持久化,在投递时指定delivery_mode=> 2(1是非持久化)

如果exchange和queue都是持久化的,那么它们之间的binding也是持久化的。如果exchange和queue两者之间有一个持久化,一个非持久化,就不允许建立绑定。

RabbitMQ -集群

RabbitMQ集群中有两种节点:

1 内存节点:只保存状态到内存(一个例外的情况是:持久的queue的持久内容将被保存到disk)

2 磁盘节点:保存状态到内存和磁盘。

内存节点虽然不写入磁盘,但是它执行比磁盘节点要好。集群中,只需要一个磁盘节点来保存状态 就足够了

如果集群中只有内存节点,那么不能停止它们,否则所有的状态,消息等都会丢失。

spring-amqp

spring-amqp是rabbbitmq和spring的整合,它对rabbitmq的队列,消息交换机等进行了封装,spring-amqp项目包括三个子项目:spring-amqp、spring-erlang、spring-rabbit
  • 安卓客户端下载
  • 微信扫一扫
  • weinxin
  • 微信公众号
  • 微信公众号扫一扫
  • weinxin
avatar