zoukankan      html  css  js  c++  java
  • RabbitMQ

    一、Docker 安装RabbitMQ

     docker run -di --name hxrabbit -e RABBITNQ_DEFAULT_USER=admin -e  RABBITNQ_DEFAULT_PASS=admin -p 15672:15672 -p 5672:5672 -p 25672:25672 -p 61613:61613 -p 1883:1883 rabbitmq:management

    登陆可视化管理界面访问地址:http://192.168.0.81:15672

    2二、核心概念:

    Server:又称Broker,接受客户端的连接,实现AMQP实体服务。安装rabbitmq-server

    Connection:连接,应用程序与Broker的网络连接TCP/IP/三次握手和四次挥手

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

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

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

    Exchange:交换机,接受消息,根据路由键发送消息到绑定的队列。(==不具备消息存储的能力==)

    Bindings:Exchange和Queue之间的虚拟连接,binding中可以保护多个routingkey

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

    Queue:队列,也称为Message Queue,消息队列,保存消息并将它们转发给消费者

    三、RabbitMq的运行流程

     

     四、面试题分析

    1.Rabbitmq为什么需要信道,为什么不是TCP直接通信

      (1)tcp的创建和销毁开销大,创建需要三次握手,销毁需要4次分手

      (2)如果不用信道,那应用程序就会TCP连接到Rabbit服务器,高峰时每秒成千上万连接就会造成资源的巨大浪费,而且底层操作系统每秒处理tcp连接数也是有限的,必定造成性能瓶颈。

      (3)信道原理是一条线程一条信道,多条线程多条信道同用一个tcp连接,一条tcp连接可以容纳无线的信道,即便每秒成千上万的请求也不会成为性能瓶颈。

    2.queue队列到底在消费者创建还是生产者创建?

         (1)一般建议是在rabbitmq操作面板创建,这是一种稳妥的做法。

         (2)按照常理来说,确实应该消费者这边创建是最好,消息的消费是在这边,这样你承受一个后果,可能会丢失消息。

         (3)在生产者创建队列也是可以,这样稳妥的方法,消息是不会出现丢失。

         (4)如果你生产者和消费者都创建的队列,谁先启动谁先创建,后面启动就覆盖前面的。

  • 相关阅读:
    对象遍历 for in ,数组遍历for in 与 for of 的区别
    计算一个数组中key值相同的数量
    VUE的两种跳转push和replace对比区别
    微信公众号二次分享ios分享失败问题
    获得对象中的键或值
    第一个table根据checkbox选择tr,在另一个table中显示对应索引的tr(jq遍历的运用)
    checkbox 全选反选 获得所有的checkbox
    为什么jQuery要return this.each()?
    用jq代码写出一个轮播图。
    页面滚动到一定位置,两个div 朝中间运动。
  • 原文地址:https://www.cnblogs.com/auldlangsynezh/p/15123045.html
Copyright © 2011-2022 走看看