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-jar
uber-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: 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
表示连接成功
连接本地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 许可协议,转载请注明出处。