初识RabbitMQ

作者: HmilyMing | 来源:发表于2018-08-07 23:56 被阅读4次

    rabbitMQ是一个开源的消息代理和队列服务器,用来通过普通协议在完全不同的应用之间的共享数据,它是使用Erlang语言来编写的,并且rabbitMQ是基于AMQP协议的,在Java,PHP等等技术栈里面都能使用。

    rabbitMQ在滴滴,美团,头条艺龙等大厂中广泛应用,这是因为它具有如下的特点:

    开源,性能优秀,稳定性保障;

    提供可靠性消息投递模式(confirm),返回模式(return);

    与SpringAMQP完美的结合,API丰富;

    集群模式丰富,表达式配置,HA模式,镜像队列模型;

    保证数据不丢失的前提做到高可靠性,可用性。

    rabbitMQ高性能原因:

    erlang语言最初在于交换机领域的架构模式,这样使得rabbitMQ在broker之间进行数据交互的性能是非常优秀的。

    erlang的优点:有着和原生socket一样的延迟。

    AMQP协议: advanced message queuing Protocol,翻译为高级消息队列协议。

    AMQP的定义:是具有现代特征的二进制协议,是一个提供统一消息服务的应用层标准高级消息队列协议,是具有应用层协议的一个开放标准,为面向消息的中间件设计

    如下面的AMQP协议模型图示,生产者publisher将消息放到服务器server上,再到虚拟主机virtual host ,才到exchange上,然后exchange根据路由键把当前消息投递到对应的queue当中,消费者监听指定的queue即可获得消息。

    AMQP核心概念:

    server: 又称broker,也就是服务端,接受客户端的连接,实现AMQP实体服务

    channel:网络信道,几乎所有的操作都在channel中进行,channel是进行消息读写的通道。客户端可建立多个channel,每个channel代表一个回话任务。

    message:消息,服务器和应用程序之间传送的数据,由properties和body组成。properties可以对消息进行修饰,比如消息的优先级/延迟等高级特性;body就是消息体内容。

    virtual host:虚拟地址,用于进行逻辑隔离,是最上层的消息路由,是一个逻辑概念,类似redis分16个逻辑数据库。一个 virtual host里面可以有若干个exchange和queue,同一个virtual host里面不能有相同名称的exchange或queue。

    exchange:交换机,接收消息,根据路由键转发消息到绑定的队列。

    生产者直接把消息放到exchange里面,exchange根据路由键转发消息到绑定的队列里面,exchange和队列有一个绑定的关系

    binding:exchange和queue之间的虚拟连接,binding中可以包含routing key

    routing key:一个路由规则,虚拟机可用它来确定如何路由一个特定消息。

    queue:也成为massage queue,消息队列,保存消息并将它们转发给消费者。

    rabbitMQ的整体架构如下图所示,最大的特点就是生产者不需要关心消息投递到哪个队列,消费者也不需要关心这个消息是从哪个exchange来的

    rabbitMQ的整体架构

    rabbitMQ消息的流转如下图所示,生产者生产并投递消息到exchange里面,exchange可以绑定多个队列,exchange根据路由策略路由键把消息放到对应的一个队列当中。发消息时有两个关注点,第一是指定放到哪个exchange上,第二是在发送消息时设置路由键,消费者订阅消费消息即可。

    rabbitMQ消息的流转

    相关文章

      网友评论

        本文标题:初识RabbitMQ

        本文链接:https://www.haomeiwen.com/subject/zdszvftx.html