消息服务器准备

消息服务器简介

消息服务器,也常被称为消息代理(Message Broker)或消息中间件,是一种在分布式应用系统中处理、存储和传递消息的软件应用。消息服务器允许各个应用组件或系统之间进行通信,而无需直接连接或知道彼此的存在,提供了一种松耦合、可伸缩和可靠的通信方式。

以下是消息服务器的一些核心概念和特性:

  1. 发布/订阅模式 (Pub/Sub):在此模式中,发送者(发布者)发布消息到特定的主题,而接收者(订阅者)则订阅它们感兴趣的主题。当消息被发布到某个主题时,所有订阅了该主题的订阅者都会收到这个消息。

  2. 点对点 (Point-to-Point):在这种模式下,消息被放入队列,然后由单个接收者获取和消费。即使有多个消费者,每个消息也只会被处理一次。

  3. 持久化 (Persistence):很多消息服务器支持消息的持久化,即使在系统故障或重启的情况下,也能确保消息不会丢失。

  4. 消息确认和重试:为确保消息的可靠传递,消息服务器通常提供消息确认机制。如果消息未被正确处理,系统可以选择重试发送或采取其他行动。

  5. 过滤和路由:基于消息的内容或属性,消息服务器可以决定如何路由消息或决定哪些订阅者应该收到特定的消息。

  6. 事务处理:某些消息服务器支持事务,确保在处理多个操作时维持一致性。

  7. 安全:消息服务器通常提供身份验证、授权和加密功能,确保消息的安全传递。

常见的消息服务器软件有:RabbitMQ、Apache Kafka、ActiveMQ、MQTT (如 EMQ X 和 Mosquitto) 和 Microsoft Message Queue (MSMQ),等等。

总的来说,消息服务器提供了一种方式来在分布式环境中传递信息,确保消息的可靠性、持久性和有序性,并允许系统组件以解耦合的方式进行交互。

emqx简介

EMQ X 是一款开源的 MQTT 消息代理,专为 IoT (物联网)、M2M (机器对机器的通信) 和移动应用设计。它支持大规模的 MQTT 客户端连接,提供高吞吐、低延迟的实时消息路由。

以下是 EMQ X 的一些核心特点和概念:

  1. 高性能:EMQ X 优化了 MQTT 消息传递路径,提供了高吞吐和低延迟的消息代理服务。

  2. 分布式:EMQ X 支持分布式节点连接,能够实现水平扩展以满足大规模设备连接的需求。

  3. 插件系统:EMQ X 提供了强大的插件系统,允许开发者根据需要扩展其功能,例如:多种认证/授权方式、消息存储、集成其他系统等。

  4. 协议支持:尽管 MQTT 是其主要的协议,但 EMQ X 也支持多种其他的 IoT 协议,如 MQTT-SN、CoAP、LwM2M、STOMP 等。

  5. 安全性:EMQ X 支持基于 TLS/SSL 的加密通信,提供 ACL (访问控制列表) 基于的细粒度的订阅/发布权限控制,以及多种身份验证方法,如:用户名/密码、JWT、客户端证书等。

  6. 持久化和桥接:EMQ X 支持消息的持久化存储,以及与其他 MQTT 代理或系统的桥接功能。

  7. 监控和管理:EMQ X 提供了详细的监控统计和管理接口,帮助管理员实时监控系统状态,进行故障排查和性能优化。

EMQ X 的广泛应用领域包括:智能家居、车联网、智能制造、智慧城市等。由于其开源的特性、高性能和扩展性,EMQ X 已经吸引了许多大型企业和组织的使用。

使用docker-compose安装emqx

使用 docker-compose 来安装和运行 EMQ X 时,以下是一般的步骤:

使用 docker-compose 安装 EMQ X 的步骤:

  1. 准备环境

    • 确保您已经在机器上安装了 Docker 和 Docker Compose。
  2. 创建 docker-compose.yml 文件

    • 在一个目录中,创建一个名为 docker-compose.yml 的文件,该文件将包含启动 EMQ X 的所有配置。
  3. 配置 EMQ X

    • docker-compose.yml 文件中,定义 EMQ X 服务,包括所需的镜像、端口映射、网络和卷。
  4. 启动服务

    • 在终端或命令提示符中,导航到包含 docker-compose.yml 文件的目录。
    • 使用命令 docker-compose up -d 启动服务。
  5. 验证 EMQ X 的运行

    • 访问 EMQ X 的管理界面(通常是在 http://<host_ip>:18083)或使用 MQTT 客户端测试连接。
  6. 关闭或删除服务(如果需要的话):

    • 使用 docker-compose down 命令停止并删除服务。

一个典型的 docker-compose.yml 文件

以下是一个典型的 docker-compose.yml 文件:

version: '3.2'

services:

  emqx:
    image: emqx/emqx:5.1.4
    container_name: ai4e_emqx
    restart: always
    ports:
      - "1883:1883"
      - "8883:8883"
      - "8083:8083"
      - "8084:8084"
      - "18083:18083"
    # volumes:
    #   - ./emqx_data:/opt/emqx/data
    #   - ./emqx_log:/opt/emqx/log
    #   - ./emqx_etc:/opt/emqx/etc
    networks:
      ai4e_net:
        ipv4_address: 172.20.0.117

networks:
  ai4e_net:
    ipam:
      config:
        - subnet: 172.20.0.0/16

我们来解释下:

version: '3.2'

services:
  emqx:
    image: emqx/emqx:5.1.4 # 使用 EMQ X 5.1.4 版本的 Docker 镜像。
    container_name: ai4e_emqx # 定义容器的名字为 ai4e_emqx。
    restart: always # 如果容器退出,总是重新启动它。
    ports: # 映射宿主机与容器之间的端口。
      - "1883:1883"
      - "8883:8883"
      - "8083:8083"
      - "8084:8084"
      - "18083:18083"
    networks: # 指定容器使用的网络。
      ai4e_net:
        ipv4_address: 172.20.0.117

networks:
  ai4e_net:
    ipam:
      config:
        - subnet: 172.20.0.0/16
  • 版本:此配置使用的 docker-compose 文件版本为 3.2。

  • 服务

    • emqx:定义名为 emqx 的服务,使用版本为 5.1.4 的 EMQ X 镜像。
  • 端口映射:将容器内部的端口映射到宿主机的端口。例如,宿主机的 1883 端口映射到容器的 1883 端口。

  • 网络:定义了一个名为 ai4e_net 的自定义网络,并为 EMQ X 容器分配了 172.20.0.117 的静态 IP 地址。

  • IPAM:定义网络的 IP 地址管理 (IPAM) 配置。在这里,它定义了一个子网 172.20.0.0/16,从中分配 IP 地址。

这个 docker-compose.yml 文件为 EMQ X 定义了基本的运行配置,包括使用的镜像、端口映射和网络设置。