4.3.5 模块本地开发与调试
Arkctl 工具安装
Arkctl 模块安装主要提供自动打包和部署能力,包括调用 mvn 命令自动构建模块为 jar 包,调用 arklet 提供的 api 接口进行完成部署。ArkCtl 安装方式可以参照文档:arkctl 安装 的本地环境开发验证小节。
安装方法一: 使用 golang 工具链
- 在 golang 官网 下载对应的 golang 版本,版本需要在 1.21 以上。
- 执行
go install github.com/koupleless/arkctl@v0.2.1
命令,安装 arkctl 工具。
安装方式二: 下载二进制文件
- 根据实际运行操作系统,下载 arkctl 。
- 将对应的二进制解压并放到合适的系统变量 PATH 所在的目录里。
- 在基座和模块已经改造完成后,启动好基座后,可以使用 arkctl 快速完成构建与部署,将模块部署到基座中。
Linux/Mac 如何找到 PATH 的值?
终端执行
echo $PATH
# 选择一个目录,将 arkctl 放到该目录下
Windows 下如何找到 PATH 的值?
按 Windows + R 键,输入 cmd,然后按 Enter 打开命令提示符。在命令提示符窗口中,输入以下命令并按 Enter:
echo %PATH%
注意,在 Windows 环境下,如果开启 Windows Defender,浏览器下载二进制时可能会误报,提示如下:
报错原因可参考[go 官方文档](https://go.dev/doc/faq#virus)。此报错可以忽略,放心下载。
由于 Arkctl 部署其实是调用 API 的方式来完成的,如果不想使用命令行工具,也可以直接使用 Arklet API 接口 完成部署操作。当然我们也提供了 telnet 的方式来部署模块,详细可查看这里
本地快速部署
你可以使用 arkctl 工具快速地进行模块的构建和部署,提高本地调试和研发效率。
场景 1:模块 jar 包构建 + 部署到本地运行的基座中。
准备:
- 在本地启动一个基座。
- 打开一个模块项目仓库。
执行命令:
# 需要在仓库的根目录下执行。
# 比如,如果是 maven 项目,需要在根 pom.xml 所在的目录下执行。
arkctl deploy
命令执行完成后即部署成功,用户可以进行相关的模块功能调试验证。
场景 2:部署一个本地构建好的 jar 包到本地运行的基座中。
准备:
- 在本地启动一个基座。
- 准备一个构建好的 jar 包。
执行命令:
arkctl deploy /path/to/your/pre/built/bundle-biz.jar
命令执行完成后即部署成功,用户可以进行相关的模块功能调试验证。
场景 3: 部署一个本地还未构建的 jar 包到本地运行的基座中。
准备:
- 在本地启动一个基座
执行命令:
arkctl deploy ./path/to/your/biz/
注意该命令适用于模块可以独立构建的(可以在biz目录里成功执行 mvn package 等命令),则该命令会自动构建该模块,并部署到基座中。
场景 4: 在多模块的 Maven 项目中,在 Root 构建并部署子模块的 jar 包。
准备:
- 在本地启动一个基座。
- 打开一个多模块 Maven 项目仓库。
执行命令:
# 需要在仓库的根目录下执行。
# 比如,如果是 maven 项目,需要在根 pom.xml 所在的目录下执行。
arkctl deploy --sub ./path/to/your/sub/module
命令执行完成后即部署成功,用户可以进行相关的模块功能调试验证。
场景 5: 模块 jar 包构建 + 部署到远程运行的 k8s 基座中。
准备:
- 在远程已经运行起来的基座 pod。
- 打开一个模块项目仓库。
- 本地需要有具备 exec 权限的 k8s 证书以及 kubectl 命令行工具。
执行命令:
# 需要在仓库的根目录下执行。
# 比如,如果是 maven 项目,需要在根 pom.xml 所在的目录下执行。
arkctl deploy --pod {namespace}/{podName}
命令执行完成后即部署成功,用户可以进行相关的模块功能调试验证。
场景 6: 如何更快的使用该命令
可以在 IDEA 里新建一个 Shell Script,配置好运行的目录,然后输入 arkctl 相应的命令,如下图即可。
模块本地调试
模块与基座出于同一个 IDEA 工程中
因为 IDEA 工程里能看到模块代码,模块调试与普通调试没有区别。直接在模块代码里打断点,基座通过 debug 方式启动即可。
模块与基座在不同 IDEA 工程中
- 基座启动参数里增加 debug 配置
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8000
,然后启动基座 - 模块添加 remote jvm debug, 设置 host 为 localhost
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8000
- 模块里打断点
- 这时候安装模块后就可以调试了
查看部署状态
场景 1: 查询当前基座中已经部署的模块。
准备:
- 在本地启动一个基座。
执行命令:
arkctl status
场景 2: 查询远程 k8s 环境基座中已经部署的模块。
准备:
- 在远程 k8s 环境启动一个基座。
- 确保本地有 kube 证书以及有关权限。
执行命令:
arkctl status --pod {namespace}/{name}
通过 arthas 查看运行时模块状态与信息
获取所有 Biz 信息
vmtool -x 1 --action getInstances --className com.alipay.sofa.ark.container.model.BizModel --limit 100
获取特定 Biz 信息
# 请替换 ${bizName}
vmtool -x 1 --action getInstances --className com.alipay.sofa.ark.container.model.BizModel --limit 100 | grep ${bizName} -A 4
获取特定 BizClassLoader 对应的 Biz 信息
# 请替换 ${BizClassLoaderHashCode}
vmtool -x 1 --action getInstances --className com.alipay.sofa.ark.container.model.BizModel --limit 100 | grep ${BizClassLoaderHashCode} -B 1 -A 3
如:
Feedback
Was this page helpful?
Welcome propose feedback to community!
Welcome propose feedback to community, or improve this document directly.。