【EMQX实践】0到1实现EMQX客户端组件

在当今快速发展的物联网(IoT)时代,设备间的即时通信变得至关重要。Spring Boot以其简化配置和快速部署的特性,成为构建企业级应用的首选框架。Vert.x作为一个响应式应用平台,以其轻量级和高性能的特点,为构建高并发的分布式系统提供了强大支持。结合EMQ X Broker,我们能够实现一个基于Spring Boot和Vert.x的MQTT客户端,它将为微服务架构下的设备通信提供高效、可靠的解决方案。通过本实现指南,我们将一步步引导开发者如何从零开始构建这一组件,探索其在现代应用开发中的无限可能。

技术框架

为什么选择SpringBoot及 Vert.x 作为组件主要技术框架?
我想当我们聊到Java项目实践时候,往往离不开SpringSpringBoot 框架:

  • Spring Boot简化了基于Spring的应用开发过程,自动配置和微服务支持使其成为快速开发和部署微服务的理想选择。
  • Spring Boot拥有庞大的社区和丰富的生态系统,提供了大量的库和工具,方便开发者快速解决问题和扩展功能。
  • Spring Boot的应用结构清晰,易于理解和维护。
  • Spring Boot可以轻松地扩展应用,无论是水平扩展还是垂直扩展。

Vert.x它的核心是一个轻量级的、多语言的、响应式的应用程序运行时,专为构建响应式、高性能、可伸缩的应用程序而设计。

  • Vert.x提供了一个事件驱动的非阻塞编程模型,非常适合处理大量并发连接,这对于需要高吞吐量和低延迟的MQTT通信至关重要。
  • Vert.x都拥有庞大的社区和丰富的生态系统,提供了大量的库和工具,方便开发者快速解决问题和扩展功能。
  • Vert.x的模块化设计也有助于保持代码的整洁和可维护性。
  • Vert.x可以轻松地扩展应用,无论是水平扩展还是垂直扩展。

Spring Boot遇上Vert.x,它们的结合带来了更多的可能性:

  • Spring Boot和Vert.x可以很好地集成,Spring Boot提供了Vert.x的集成支持,使得在Spring Boot应用中使用Vert.x变得简单。
  • Vert.x的高性能特性,结合Spring Boot的轻量级特性,可以构建出既快速又高效的应用。

创建项目

源码地址Gitee
工具:idea、maven
环境:jdk17

创建项目步骤

  1. 选择创建新项目: 在启动界面,点击“Create New Project”(创建新项目)。
  2. 选择 Maven: 在左侧的项目类型列表中,选择“Maven”。
  3. 配置 JDK: 确保 Maven 项目使用的 JDK 版本与你的 Maven 配置匹配。你可以通过点击右侧的“JDK”下拉菜单来选择。
  4. 添加 Maven 架构: 如果你需要特定的 Maven 架构,可以在右侧的“Add Archetype”(添加架构)部分搜索并选择一个架构,例如 maven-archetype-quickstart
  5. 填写项目信息: 在右侧的表单中,填写项目的基本设置,包括:
    • Group Id(组 ID):通常是一个反向域名形式的标识符,如 com.gitee.xmhzzz.
    • Artifact Id(构件 ID):项目的唯一名称,如 emqx-practice.
    • Version(版本):项目的版本号,如 1.0.0-SNAPSHOT.
    • Package(包):项目的根包名,通常是组 ID 的全小写形式。

image.png

创建模块

  1. 选择创建新项目: 在启动界面,点击“New Module”(创建项目的模块)。
  2. 选择 Maven: 在左侧的项目类型列表中,选择“Maven”。
  3. 配置 JDK: “JDK”选择JDK17以上。
  4. 添加 Maven 架构: 如果你需要特定的 Maven 架构,可以在右侧的“Add Archetype”(添加架构)部分搜索并选择一个架构,例如 maven-archetype-quickstart
  5. 添加Parent: emqx-practice.
  6. 填写项目信息: 在右侧的表单中,填写项目的基本设置,包括:
    • Group Id(组 ID):通常是一个反向域名形式的标识符,如 com.gitee.xmhzzz.
    • Artifact Id(构件 ID):项目的唯一名称,如 emqx-client.
    • Version(版本):项目的版本号,如 1.0.0-SNAPSHOT.
    • Package(包):项目的根包名,通常是组 ID 的全小写形式。

创建三个模块emqx-client、emqx-client-starter、emqx-example-service
【EMQX实践】0到1实现EMQX客户端组件_第1张图片

maven依赖

parent项目emqx-practice

maven依赖

<dependencyManagement>
  <dependencies>

    <dependency>
      <groupId>org.springframework.bootgroupId>
      <artifactId>spring-boot-dependenciesartifactId>
      <version>${spring-boot.version}version>
      <type>pomtype>
      <scope>importscope>
    dependency>

    <dependency>
      <groupId>io.vertxgroupId>
      <artifactId>vertx-stack-depchainartifactId>
      <version>${vertx.version}version>
      <type>pomtype>
      <scope>importscope>
    dependency>

    <dependency>
      <groupId>com.alibaba.fastjson2groupId>
      <artifactId>fastjson2artifactId>
      <version>${fastjson2.version}version>
    dependency>

    <dependency>
      <groupId>com.squareup.okhttp3groupId>
      <artifactId>okhttpartifactId>
      <version>${okhttp.version}version>
    dependency>

    <dependency>
      <groupId>com.google.guavagroupId>
      <artifactId>guavaartifactId>
      <version>${guava.version}version>
    dependency>

    <dependency>
      <groupId>cn.hutoolgroupId>
      <artifactId>hutool-allartifactId>
      <version>${hutool.version}version>
    dependency>

    <dependency>
      <groupId>org.apache.commonsgroupId>
      <artifactId>commons-lang3artifactId>
      <version>${commons-lang3.version}version>
    dependency>

  dependencies>
dependencyManagement>

版本管理

<properties>
  <maven.compiler.source>17maven.compiler.source>
  <maven.compiler.target>17maven.compiler.target>
  <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
  <spring-boot.version>3.0.2spring-boot.version>
  <vertx.version>4.2.3vertx.version>
  <fastjson2.version>2.0.33fastjson2.version>
  <okhttp.version>3.14.9okhttp.version>
  <guava.version>32.0.1-jreguava.version>
  <hutool.version>5.8.20hutool.version>
  <commons-lang3.version>3.12.0commons-lang3.version>
properties>

Module模块emqx-client

<dependencies>

  <dependency>
    <groupId>com.squareup.okhttp3groupId>
    <artifactId>okhttpartifactId>
  dependency>

  <dependency>
    <groupId>io.vertxgroupId>
    <artifactId>vertx-mqttartifactId>
  dependency>

  <dependency>
    <groupId>io.vertxgroupId>
    <artifactId>vertx-coreartifactId>
  dependency>

  <dependency>
    <groupId>com.alibaba.fastjson2groupId>
    <artifactId>fastjson2artifactId>
  dependency>

  <dependency>
    <groupId>org.slf4jgroupId>
    <artifactId>slf4j-apiartifactId>
  dependency>

  <dependency>
    <groupId>com.google.guavagroupId>
    <artifactId>guavaartifactId>
  dependency>

  <dependency>
    <groupId>cn.hutoolgroupId>
    <artifactId>hutool-allartifactId>
  dependency>

  <dependency>
    <groupId>org.apache.commonsgroupId>
    <artifactId>commons-lang3artifactId>
  dependency>

dependencies>

Module模块emqx-client-starter

<dependencies>

  <dependency>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starterartifactId>
  dependency>

  <dependency>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-autoconfigureartifactId>
  dependency>

  <dependency>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-configuration-processorartifactId>
    <optional>trueoptional>
  dependency>

  <dependency>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starter-testartifactId>
    <scope>testscope>
  dependency>

  <dependency>
    <groupId>com.gitee.xmhzzzgroupId>
    <artifactId>emqx-clientartifactId>
    <version>${project.version}version>
  dependency>

dependencies>

Module模块emqx-example-service

<dependencies>

  <dependency>
    <groupId>org.springframework.bootgroupId>
    <artifactId

你可能感兴趣的:(EMQX实践专栏,java,开发语言,中间件,iot,物联网)