2026/3/7 13:59:37
网站建设
项目流程
网站主体备案号,在线视频教学网站建设,用数据库代码做家乡网站,网页设计公司怎么赚钱RabbitMQ
初识MQ
MQ#xff08;MessageQueue#xff09;#xff0c;中文是消息队列#xff0c;字面来看就是存放消息的队列。也就是异步调用中的Broker
协议
AMQP
AMQP#xff08;Advanced Message Queuing Protocol#xff0c;高级消息队列协议#xff09;是一个应…RabbitMQ初识MQMQMessageQueue中文是消息队列字面来看就是存放消息的队列。也就是异步调用中的Broker协议AMQPAMQPAdvanced Message Queuing Protocol高级消息队列协议是一个应用层的开放式标准协议用于在分布式系统中实现消息的可靠传递。它定义了消息的结构、交换方式、路由规则等规范使不通过厂商的消息中间件能够互联互通在AMQP协议中消息收发涉及到如下一些概念Borker接收和分发消息的应用Virtual host出于多租户和安全因素设计的把AMQP的基本组件划分到一个虚拟的分组中类似于网络中的namespace概念。当多个不同的用户使用同一个RabbitMQ 提供的服务时可以划分出多个 vhost每个用户在自己的 vhost 中创建exchangequeue等Connectionpublisherconsumer 和 broker 之间的 TCP 连接断开连接的操作只会在 client 端进行Broker 不会断开连接除非出现网络故障或 broker 服务出现问题Channel如果每一次访问 RabbitMQ 都建立一个 Connection在消息量大的时候建立 TCP Connection 的开销将是巨大的效率也较低。Channel 是在 Connection 内部建立的逻辑连接如果应用程序支持多线程通常每个 Thread 创建单独的 Channel 进行通讯AMQP method 包含了 Channel id 帮助客户端和 Message Broker 识别 Channel所以 Channel 之间是完全隔离的。Channel 作为轻量级的 Connection 极大减少了操作系统建立 TCP Connection 的开销ExchangeMessage 到达 Broker 的第一站根据分发规则匹配查询表中的 routing key分发消息到 queue 中去。常用的类型有direct (点对点), topic(发布订阅) 以及 fanout (广播)Queue消息最终被送到这里等待 Consumer 取走一个 Message 可以被同时拷贝到多个 queue 中BindingExchange 和 Queue 之间的虚拟连接binding 中可以包含 routing keyBinding 信息被保存到 Exchange 中的查询表中作为 Message 的分发依据XMPPXMPP可扩展消息处理现场协议Extensible Messaging and Presence Protocol是一个基于 XML 的协议多用于即时消息IM以及在线现场探测适用于服务器之间的准即时操作。核心是基于 XML 流传输这个协议可能最终允许因特网用户向因特网上的其他任何人发送即时消息即使其操作系统和浏览器不同。 它的优点是通用公开、兼容性强、可扩展、安全性高缺点是 XML 编码格式占用带宽大MQTTMQTTMessage Queuing Telemetry Transport消息队列遥测传输是 IBM 开发的一个即时通讯协议目前看来算是物联网开发中比较重要的协议之一了该协议支持所有平台几乎可以把所有联网物品和外部连接起来被用来当做传感器和 Actuator比如通过 Twitter 让房屋联网的通信协议它的优点是格式简洁、占用带宽小、支持移动端通信、支持 PUSH、适用于嵌入式系统比较RabbitMQActiveMQRocketMQKafka社区RabbitApache阿里Apache开发语言ErlangJavaJavaScalaJava协议支持AMQPXMPPSMTPSTOMPOpenWireSTOMPRESTXMPPAMQP自定义协议自定义协议可用性高一般高高单机吞吐量一般差高非常高消息延迟微秒级毫秒级毫秒级毫秒以内消息可靠性高一般高一般安装创建data文件夹mkdir-p /opt/rabbitmq/data拉取镜像dockerpull rabbitmq查看镜像dockerimages启动rabbitmqdockerrun -d -v /opt/rabbitmq/data:/var/lib/rabbitmq -p5672:5672 -p15672:15672 --name rabbitmq -eRABBITMQ_DEFAULT_USERadmin -eRABBITMQ_DEFAULT_PASSadmin rabbitmq启动rabbitmq_managementdockerexec-it rabbitmq rabbitmq-pluginsenablerabbitmq_management访问rabbitmq管理页面浏览器访问http://192.168.159.128:15672初始账号密码admin admin