一、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)如果你生产者和消费者都创建的队列,谁先启动谁先创建,后面启动就覆盖前面的。