• RabbitMQ简介


    1、引言

    你是否遇到过2个或者多个系统间,需要通过定时任务来同步某些数据?

    你是否在为异构系统的不同进程间相互调用、通讯的问题而苦恼、挣扎?

    如果是,那么恭喜你,消息服务让你可以很轻松地解决这些问题。
    消息服务擅长于解决多系统、异构系统间的数据交换(消息通知/通讯)问题,你也可以把它用于系统间服务的相互调用(RPC)。

    RabbitMQ就是当前最主流的消息中间件之一。

    2、RabbitMQ简介

    (1)AMQP(高级消息队列协议 Advanced Message Queue Protocol)

    AMQP是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。

    AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。

    AMQP当中有4个概念非常重要: 虚拟主机(virtual host),交换机(exchange),队列(queue)和绑定(binding)。

        一个虚拟主机持有一组交换机、队列和绑定。

        为什么需要多个虚拟主机呢?很简单,RabbitMQ当中,用户只能在虚拟主机的粒度进行权限控制。因此,如果需要禁止A组访问B组的交换机/队列/绑定,必须为A和B分别创 建一个虚拟主机。每一个RabbitMQ服务器都有一个默认的虚拟主机“/”。

        Producer 要产生消息必须要创建一个 Exchange ,Exchange 用于转发消息,但是它不会做存储,如果没有 Queue bind 到 Exchange 的话,它会直接丢弃掉 Producer 发送过来的消息,当然如果消息总是发送过去就被直接丢弃那就没有什么意思了,一个 Consumer 想要接受消息的话,就要创建一个 Queue ,并把这个 Queue bind 到指定的 Exchange 上,然后 Exchange 会把消息转发到 Queue 那里,Queue 会负责存储消息,Consumer 可以通过主动 Pop 或者是 Subscribe 之后被动回调的方式来从 Queue 中取得消息。
    Exchange,Queue,RoutingKey

    蓝色-- Client(相对于Rabbitmq Server来说)

    绿色--Exchange,交换器(Exchange),它是发送消息的实体。

    红色—Queue,队列(Queue),这是接收消息的实体。

    绑定器(Bind),将交换器和队列连接起来,并且封装消息的路由信息。

    RoutingKey,Exchange指向Queue的黑色线,可以将它简单的理解为一条连接Exchange和Queue的路线。 

    Exchange和Queue都需要通过channel来进行定义,而RoutingKey则只需要在binding时取个名字就行了。


    (2)RabbitMQ是一个开源的AMQP实现的代理软件。

    RabbitMQ服务器端用Erlang语言编写,支持多种客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX。

    用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。
    下面将重点介绍RabbitMQ中的一些基础概念,了解了这些概念,是使用好RabbitMQ的基础。

    3、ConnectionFactory、Connection、Channel

    ConnectionFactory、Connection、Channel都是RabbitMQ对外提供的API中最基本的对象。

    (1)Connection是RabbitMQ的socket链接,它封装了socket协议相关部分逻辑。

        Connection就是一个TCP的连接。Producer和Consumer都是通过TCP连接到RabbitMQ Server的。以后我们可以看到,程序的起始处就是建立这个TCP连接。

    (2)ConnectionFactory为Connection的制造工厂。


    (3)Channel是虚拟连接。它建立在上述的TCP连接中。数据流动都是在Channel中进行的。也就是说,一般情况是程序起始建立TCP连接,第二步就是建立这个Channel。

        Channel是我们与RabbitMQ打交道的最重要的一个接口,我们大部分的业务操作是在Channel这个接口中完成的,包括定义Queue、定义Exchange、绑定Queue与Exchange、发布消息等。

    RabbitMQ基础概念详细介绍  https://www.cnblogs.com/williamjie/p/9481774.html

    生活其实也很简单,喜欢的就去争取、得到的就珍惜、失去的就忘记。
  • 相关阅读:
    html标签嵌套规则
    关于setTimeout和Promise执行顺序问题
    vue基础
    new操作符具体干了什么
    ["1", "2", "3"].map(parseInt)
    线性表
    树的一些概念和性质
    A*与IDA*
    树上启发式合并
    启发式合并
  • 原文地址:https://www.cnblogs.com/Formulate0303/p/14439683.html
Copyright © 2020-2023  润新知