RabbitMQ 基础(一)

发布于 23 天前  65 次阅读


中间件

一个企业可能同时运行着多个不同的业务系统,这些系统可能基于不同的操作系统、不同的数据库、异构的网络环境。现在的问题是,如何把这些信息系统结合成一个有机地协同工作的整体,真正实现企业跨平台、分布式应用。中间件便是解决之道,它用自己的复杂换取了企业应用的简单。

具体地说,中间件屏蔽了底层操作系统的复杂性,使程序开发人员面对一个简单而统一的开发环境,减少程序设计的复杂性,将注意力集中在自己的业务上,不必再为程序在不同系统软件上的移植而重复工作,从而大大减少了技术上的负担,中间件带给应用系统的,不只是开发的简便、开发周期的缩短,也减少了系统的维护、运行和管理的工作量,还减少了计算机总体费用的投入。

消息中间件

消息中间件是一种接受数据、接受请求、存储数据、发送数据等功能的技术服务。其核心组成部分包括:消息的协议、消息的持久化机制、消息的分发策略、消息的高可用、高可靠和消息的容错机制。

消息队列协议

所谓协议是指:

  • 计算机底层操作系统和应用程序通讯时共同遵守的一组约定,只有遵循共同的约定和规范,系统和底层操作系统之间才能相互交流。
  • 和一般的网络应用程序的不同它主要负责数据的接受和传递,所以性能比较高。
  • 协议对数据格式和计算机之间交换数据都必须严格遵守规范。

消息中间件不采用 http 协议,所有的中间件技术都是基于 tcp/ip 协议基础之上构建新型的协议规范。而常见的消息中间件协议有:OpenWire、AMQP、MQTT、Kafka 和 OpenMessage 协议。

为什么消息中间件不直接使用 http 协议?

  • http 请求报文头和响应报文头是比较复杂的,包含了 Cookie、数据的加密解密、状态码和响应码等附加的功能,但是对于一个消息而言,我们并不需要这么复杂,也没有这个必要性,它其实就是负责数据传递,存储,分发就行,要追求的是高性能。
  • 大部分情况下 http 都是短连接,在实际的交互过程中,一个请求到响应可能会中断,中断以后就不会执行持久化,就会造成请求的丢失。这样就不利于消息中间件的业务场景,消息中间件可能是一个长期的获取信息的过程,为了保证消息和数据的高可靠和稳健的运行。

消息分发策略的机制和对比

ActiveMQRabbitMQKafkaRocketMQ
发布订阅
轮询分发×
公平分发××
重发×
消息拉取×

RabbitMQ

RabbitMQ 是一个开源的遵循 AMQP 协议实现的基于 Erlang 语言编写,支持多种客户端(语言),用于在分布式系统中存储和转发消息,具有高可用、高可扩和易用性等特征。

Docker 安装并运行

#用户名和密码都是 a
docker run -itd --name rabbit01 --hostname myrabbit -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin -p 15672:15672 -p  5672:5672 -p 25672:25672 rabbitmq:management

浏览器访问 ip:15672,出现如下页面就说明成功了。

RabbitMQ 基础(一)插图