• RabbitMQ理论


    RabbitMQ理论

     

    消息 = 有效载荷(数据) + 标签(包含载荷和收件人的信息)

     

    信道:你的应用于RabbitMQ代理服务器之间的TCP连接(有唯一的ID),信道主要解决了每一个线程单独TCP连接造成的性能瓶颈。

     

    AMQP:高级消息队列协议(Advance Message Queuing protocol)

     

    AMQP 栈 = 交换器 + 队列 + 虚拟主机 (提高了吞吐量)

     

    交换器类型:

    direct(默认):按照路由键分发

    fanout:广播分发给每一个订阅者

    topic: 按照主题分发

    headers(只匹配消息的header,很少用)

     

    交换器与队列之间存在绑定。

     

    如何让消息持久化?

    1:将消息表示为持久化的:

    durable属性设置为true 、投递模式 delivery model 设置为2

    2:必须发布到持久化的交换器中,并且到达持久化的队列中

    这样的消息会写入磁盘持久化日志文件(写好之后才会响应给生产者,消息被消费之后要标为等待垃圾收集。)

     

     

     

    命令:

    1:自动接收消费信息:basic.consume:

    2:只获取单条信息:basic.get

    3:丢弃一条消息:将requeue设置为false,消息放入死亡队列

    4:创建队列:queue.declare(不指定队列的名字,会返回随机名称,在订阅和绑定时都会用到队列名称,匿名队列在构建RPC应用时会很有用)

    5:队列的设置:

    exclusive:true 表示私有队列,只有自己的应用能够订阅。

    auto-delete:true 表示最后一个消费者取消订阅之后,队列自动移除

    exclusive + auto-delete这两个命令常常组合在一起使用。

    6:如何检测队列是否存在?

    设置 queue.declare的passive属性为true,队列会让queue.declare返回成功,否则返回错误

    7:查看运行的虚拟机:rabbitmpctl list vhost

     

     

     

    多个消费者订阅了同一个队列:按照一个订阅者一条消息公平分发(因此具有负载均衡的作用),消费者受到消息必须向RabbitMQ回复确认(basic.ack),RabbitMQ将消息从队列里面删除。在应用崩溃时,RabbitMQ没有受到确认,会将消息分发给下一个订阅者,且不会再为此订阅者分发消息,人为该订阅者已经挂掉。

     

     

  • 相关阅读:
    封装aixos拦截器
    vue路由传参的三种基本方式
    vue里的路由钩子
    箭头函数特点
    webstorm激活码
    vue-cli2使用less
    vue-cli2使用rem适配
    XfZGkvBaeh
    python解析excel中图片+提取图片
    python解析谷歌在线表格链接,转化为数组形式,图片转化为链接
  • 原文地址:https://www.cnblogs.com/domi22/p/9095991.html
Copyright © 2020-2023  润新知