type
status
date
slug
summary
tags
category
icon
password
Language
将消息发送到 Hono 的 AMQP 适配器的协议网关服务
Hono用的架构是quarkus + vert.x , 我们想基于Hono的example去自定义gateway最好也使用该框架
构建一个Quarkus应用
- 可以使用Maven命令快速创建一个Quarkus应用,也可以自行搭建


注意 : 用的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>

启动服务(dev模式)
浏览器访问
http://localhost:8080/ : 项目概括http://localhost:8080/actions : 自带的一个RESTful Web Services Demohttp://localhost:8080/q/dev/ : 也很多系统信息,该地址只在dev模式有效
生成jar包
刚才是启动开发环境服务命令 , 正式部署项目则是打成jar包运行
在
application.properties 文件中添加 quarkus.package.type=uber-jaruber-jar 指含依赖库的jar , 因为仅仅将HonoResource.java制作成jar是不够的,我们需要将所有HonoResource.java编译后与其他依赖jar合并在一起

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

- 访问接口 , 正常

制作镜像
quarkus已经把Dockerfile都为我们准备好了


启动镜像

接口请求一样正常
连接Hono
Quarkus的体验先到这里 , 现在开始基于这个模板项目和Hono进行交互
连接Sandbox
- 配置application.yml 内容
quarkus:http:port: 8081package: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: truelevel: INFOmin-level: TRACEcategory:"io.quarkus.vertx.core.runtime":level: DEBUG# 网关配置gateway:tcp:insecurePort: 6666insecurePortBindAddress: "127.0.0.1"amqp:host: hono.eclipseprojects.ioport: 5672username: gw@DEFAULT_TENANTpassword: gw-secretserverRole: 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表示连接成功

连接本地Hono
身份认证
启动项目
mvn compile quarkus:dev启动nc连接

报错

没有满足依赖关系引用 hono-client-command-2.1.1.jar
- 作者:何以问
- 链接:https://heyiwen.com/article/quarkus-1
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
.jpg?table=collection&id=e7f4915d-967b-426f-8bcd-25b05e1a8ebb&t=e7f4915d-967b-426f-8bcd-25b05e1a8ebb&width=1080&cache=v2)

