zoukankan      html  css  js  c++  java
  • RabbitMq

    核心概念

    Server:又称Broker,接受客户端的连接,实现AMQP实体服务

    Connection:连接,应用程序与Broker的网络连接

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

    PS:connection太耗费性能 故在channel中做多个操作

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

    Virtual host:虚拟地址,用于进行逻辑隔离,最上层的消息路由。一个Virtual Host里面可以有若干个Exchange和Queue,同一个VirtualHost 里面不能有相同名称的Exchange或Queue

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

    Binding:Exchange和Queue之间的虚拟连接,binding中可以包含routing key

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

    Queue:也称为Message Queue,消息队列,保存消息并等待消费者消费

    Confirm 确认消息

    消息的确认,是指生产者投递消息后,如果Broker收到消息,则会给我们生产者一个应答。
    生产者进行接收应答,用来确定这条消息是否正常的发送到Broker,这种方式也是消息的可靠性投递的核心保障!

    • 第一步:在channel上开启确认模式:channel.confirmSelect()
    • 第二步:在channel上添加监听:addConfirmListener,监听成功和失败的返回结果,根据具体的结果对消息进行重新发送、或记录日志等后续处理!

    消费端自定义监听

    我们一般就是在代码中编写while循环,进行consumer.nextDelivery方法进行获取下一条消息,然后进行消费处理!
    但是我们使用自定义的Consumer更加的方便,解耦性更加的强,也是在实际工作中最常用的使用方式!

    消费端限流

    假设一个场景,首先,我们Rabbitmq服务器有上万条未处理的消息,
    我们随便打开一个消费者客户端,会出现下面情况:
    巨量的消息瞬间全部推送过来,但是我们单个客户端无法同时处理这
    么多数据!


    RabbitMQ提供了一种qos(服务质量保证)功能,即在非自动确认消息的前提下,如果一定数目的消息(通过基于consume或者channel设置Qos的值)未被确认前,不进行消费新的消息。

    void BasicQos(uint prefetchSize(消息大小),ushort prefetchCount(一次处理多少消息,一般为1),bool global(限流在什么时候应用的)); 

    作者:侠客岛的含笑
    链接:https://www.imooc.com/article/79039
    来源:慕课网
    本文首次发布于慕课网 ,转载请注明出处,谢谢合作
    往事如烟,余生有我.
  • 相关阅读:
    h5及c3新增的一些内容
    Ajax实现步骤和原理
    prototype和__proto__的关系是什么?
    深拷贝与浅拷贝
    promise与async和await的区别
    ph

    p
    python4
    python3
  • 原文地址:https://www.cnblogs.com/assistants/p/14961575.html
Copyright © 2011-2022 走看看