🗒️单例Quarkus应用连接Hono AMQP网关
00 分钟
2023-11-29
2023-11-29
type
status
date
slug
summary
tags
category
icon
password
Language

将消息发送到 Hono 的 AMQP 适配器的协议网关服务
Hono用的架构是quarkus + vert.x , 我们想基于Hono的example去自定义gateway最好也使用该框架

构建一个Quarkus应用

  • 可以使用Maven命令快速创建一个Quarkus应用,也可以自行搭建
notion image
notion image
注意 : 用的JDK版本是17
  • 构建完成之后 ,观察一下项目结构 , 有docker目录,里面有几个Dockerfile文件应该是用来制作镜像
  • dependencyManagement中quarkus使用了BOM管理, 可以方便的管理依赖
    • <dependencyManagement> <dependencies> <dependency> <groupId>${quarkus.platform.group-id}</groupId> <artifactId>${quarkus.platform.artifact-id}</artifactId> <version>${quarkus.platform.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
  • 还有quarkus的maven插件, 插件中貌似有很多功能
    • <plugin> <groupId>${quarkus.platform.group-id}</groupId> <artifactId>quarkus-maven-plugin</artifactId> <version>${quarkus.platform.version}</version> <extensions>true</extensions> <executions> <execution> <goals> <goal>build</goal> <goal>generate-code</goal> <goal>generate-code-tests</goal> </goals> </execution> </executions></plugin>
      • notion image

启动服务(dev模式)

浏览器访问
http://localhost:8080/ : 项目概括
http://localhost:8080/actions : 自带的一个RESTful Web Services Demo
http://localhost:8080/q/dev/ : 也很多系统信息,该地址只在dev模式有效
notion image

生成jar包

刚才是启动开发环境服务命令 , 正式部署项目则是打成jar包运行
application.properties 文件中添加 quarkus.package.type=uber-jar
uber-jar 指含依赖库的jar , 因为仅仅将HonoResource.java制作成jar是不够的,我们需要将所有HonoResource.java编译后与其他依赖jar合并在一起
notion image

制作二进制可执行文件

通过执行maven命令将项目制作成可执行文件, 确保docker运行正常 , quarkus的maven插件会下载一个docker镜像, 该镜像会创建一个容器,容器中有制作二进制可执行文件的环境 , 制作完成后 , 容器自动被销毁
application.properties 文件中添加 quarkus.native.container-build=true
notion image
  • 用WSL 执行以下这个文件 0.238s. 启动 , 很快
notion image
  • 访问接口 , 正常
notion image

制作镜像

quarkus已经把Dockerfile都为我们准备好了
notion image
notion image
启动镜像
notion image
接口请求一样正常

连接Hono

Quarkus的体验先到这里 , 现在开始基于这个模板项目和Hono进行交互

连接Sandbox

  • 配置application.yml 内容
    • quarkus: http: port: 8081 package: type: uber-jar # jar类型 uber-jar值包括依赖的jar包 native: container-build: true # 支持了构建容器进行部署 vertx: prefer-native-transport: true # 启用本地传输 warning-exception-time: "PT1.5S" # 如果事件循环被阻止,则显示警告之前的时间量。 resolver: cache-max-time-to-live: 0 # 成功解析的地址将被缓存的最长时间(秒) log: console: color: true level: INFO min-level: TRACE category: "io.quarkus.vertx.core.runtime": level: DEBUG# 网关配置gateway: tcp: insecurePort: 6666 insecurePortBindAddress: "127.0.0.1" amqp: host: hono.eclipseprojects.io port: 5672 username: gw@DEFAULT_TENANT password: gw-secret serverRole: AMQP adapter
  • 配置pom依赖
    • <dependency> <groupId>org.eclipse.hono</groupId> <artifactId>hono-legal</artifactId> <version>${hono.version}</version> </dependency> <dependency> <groupId>org.eclipse.hono</groupId> <artifactId>hono-client-command</artifactId> <version>${hono.version}</version> </dependency> <dependency> <groupId>org.eclipse.hono</groupId> <artifactId>hono-client-common</artifactId> <version>${hono.version}</version> </dependency> <dependency> <groupId>org.eclipse.hono</groupId> <artifactId>hono-client-amqp-connection</artifactId> <version>${hono.version}</version> </dependency> <dependency> <groupId>org.eclipse.hono</groupId> <artifactId>hono-client-amqp-common</artifactId> <version>${hono.version}</version> </dependency> <dependency> <groupId>org.eclipse.hono</groupId> <artifactId>hono-client-device-amqp</artifactId> <version>2.2.0</version> <scope>system</scope> <systemPath>D:/Idea_project/Hono-Gateway/src/main/lib/hono-client-device-amqp-2.2.0-SNAPSHOT.jar </systemPath> </dependency> <!--vertx响应式框架--> <dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-vertx</artifactId> </dependency> <!--启用YAML配置--> <dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-config-yaml</artifactId> </dependency>
  • 新增类
    • 根据官网实例ProtocolGateway 以及TcpServer, ConfigurationProducer类添加到你的项目中
  • 终端执行 mvn install 试试能不能将编译成功
    • 打完包后执行 java -jar .\target\Hono-Gateway-1.0-SNAPSHOT-runner.jar
  • 出现successfully connected to Hono's AMQP adapter 表示连接成功
notion image

连接本地Hono

身份认证
启动项目
mvn compile quarkus:dev
启动nc连接
notion image

报错

notion image
没有满足依赖关系
引用 hono-client-command-2.1.1.jar

评论