diff --git a/README.md b/README.md index c918d1d..46048f1 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,12 @@ ## 实验内容 +- 动态部署 + + 通过 [SOFAArk](https://github.com/sofastack/sofa-ark) 提供的动态模块能力,实现商品列表排序策略的动态变更。通过在不重启宿主机,不更改应用配置的情况下实现应用行为的改变。 -通过 [SOFAArk](https://github.com/sofastack/sofa-ark) 提供的动态模块能力,实现商品列表排序策略的动态变更。通过在不重启宿主机,不更改应用配置的情况下实现应用行为的改变。 +- 静态合并部署 -## 任务 - -### 1、任务准备 + 通过 [SOFAArk](https://github.com/sofastack/sofa-ark) 提供的静态合并部署能力(建议使用最新版本,如:2.1.0),宿主应用启动时,pom依赖里的 ark biz 模块会安装并启动,无需通过动态部署手动安装 ark biz 模块。 +## 前期准备 从 github 上将 demo 工程克隆到本地 @@ -25,7 +27,8 @@ git clone git@github.com:sofastack-guides/sofa-ark-dynamic-guides.git * dynamic-provider 实现了 dynamic-facade 定义的接口,并将实现类发布成一个服务 * dynamic-stock-mng 宿主应用,提供一个 web 页面,用于展示实验效果 -### 2、将 dynamic-provider 打包成 ark biz +## 动态部署 +### 1、将 dynamic-provider 打包成 ark biz 在 dynamic-provider/pom.xml 中,增加 ark 打包插件,该模块实现了宿主应用的一个接口,同时暴露一个rest服务,进行配置: ![image.png](https://gw.alipayobjects.com/mdn/rms_ff360b/afts/img/A*y2BvRKG14JUAAAAAAAAAAABkARQnAQ) @@ -54,7 +57,7 @@ git clone git@github.com:sofastack-guides/sofa-ark-dynamic-guides.git ``` -### 3、构建宿主应用 +### 2、构建宿主应用 在已下载下来的工程中,dynamic-stock-mng 作为实验的宿主应用工程模型。通过此步骤,将 dynamic-stock-mng 构建成为动态模块的宿主应用。在SOFAArk2.0之后,宿主应用已经与普通应用并无差别,主要体现在下面会介绍到的宿主应用的打包方式、构建产物和启动方式。 @@ -89,7 +92,7 @@ git clone git@github.com:sofastack-guides/sofa-ark-dynamic-guides.git ``` -### 4、打包 & 启动宿主应用 +### 3、打包 & 启动宿主应用 #### 启动宿主应用 SOFAArk 2.0之后宿主应用可以直接启动,可以在IDE里增加`-Dsofa.ark.embed.enable=true` 启动参数,直接启动 StockMngApplication 类。 @@ -98,7 +101,7 @@ SOFAArk 2.0之后宿主应用可以直接启动,可以在IDE里增加`-Dsofa.a ![image.png](https://gw.alipayobjects.com/mdn/rms_565baf/afts/img/A*3N_nS6P223IAAAAAAAAAAABkARQnAQ) -### 5、 引入默认的排序策略模块 +### 4、 引入默认的排序策略模块 dynamic-provider 提供的 io.sofastack.dynamic.facade.StrategyService 实现类返回了默认排序。 执行 mvn clean package 进行打包,此时可以打包出新版本 dynamic-provider ark biz包,如下图所示: @@ -124,7 +127,7 @@ biz count = 2 ![image.png](https://gw.alipayobjects.com/mdn/rms_c69e1f/afts/img/A*HpKuR7Wn44UAAAAAAAAAAABkARQnAQ) -### 6、新建按照销量排序策略模块 +### 5、新建按照销量排序策略模块 dynamic-provider 提供的 io.sofastack.dynamic.facade.StrategyService 实现类返回了默认排序,现在我们要开发一个新版本模块,这个新版本模块会按照销量高低返回商品列表。 首先,修改 io.sofastack.dynamic.provider.impl.StrategyServiceImpl 实现类如下: @@ -188,4 +191,92 @@ Start to process switch command now, pls wait and check. ![image.png](https://gw.alipayobjects.com/mdn/rms_c69e1f/afts/img/A*vqEJQ4775u4AAAAAAAAAAABkARQnAQ) +## 静态合并部署 + +静态合并部署,即:宿主应用启动时,pom 依赖中的 ark biz 模块会安装并启动,无需手动进行动态安装部署。静态合并部署和动态部署不是互斥的,在静态部署之后,也可以通过动态部署来升级 ark biz。在此次实验中,首先我们安装 ark biz 模块到本地 maven 仓库,接着把 ark biz 模块作为依赖引入到宿主应用中,最后启动宿主应用验证静态合并部署能力。 + +### 1、安装 ark biz 到本地 maven 仓库 +我们安装 dynamic-provider 1.0.0 版本的 ark biz 到本地 maven 仓库。 + +首先,为了统一实验流程,我们确认 dynamic-provider 版本为 1.0.0,webContextPath 为 provider: +```bash +1.0.0 +// ... +provider +``` +接着,修改 dynamic-provider 的打包配置,如下: +```bash + + com.alipay.sofa + sofa-ark-maven-plugin + 2.1.0 + + + default-cli + + repackage + + + + + true + + true + ./target + dynamic-provider + provider + true + + +``` +然后,在项目根目录下执行以下命令安装 ark biz 到本地 maven 仓库: +```bash +mvn clean install -pl dynamic-provider -am +``` +最后,在本地 maven 仓库检查存在 ark biz: +dynamic-provider-1.0.0-ark-biz.jar +> 其路径大致如下 ..../io/sofastack/dynamic-provider/1.0.0/dynamic-provider-1.0.0-ark-biz.jar +### 2、宿主应用引入 ark biz 依赖 +在 dynamic-stock-mng 中引入 dynamic-provider-1.0.0-ark-biz 依赖: +```bash + + io.sofastack + dynamic-provider + ark-biz + 1.0.0 + +``` +### 3、启动宿主应用并验证 +#### 3.1 本地打包启动验证 +首先,打包项目: +```bash +mvn clean package -DskipTests +``` +然后,启动宿主应用 dynamic-stock-mng: +```bash +cd dynamic-stock-mng/target + +java -jar -Dsofa.ark.embed.enable=true -Dcom.alipay.sofa.ark.master.biz=dynamic-stock-mng dynamic-stock-mng-1.0.0-ark-biz.jar +``` +启动成功后日志信息如下: +最后,访问 http://localhost:8080 ,现在展示的是默认的排列顺序,如下所示: +![image.png](https://gw.alipayobjects.com/mdn/rms_c69e1f/afts/img/A*HpKuR7Wn44UAAAAAAAAAAABkARQnAQ) + +#### 3.2 IDE 本地启动验证 +为了避免 IDE 读取本地编译的 dynamic-provider 和 dynamic-facade,需要将本项目中的 dynamic-provider 和 dynamic-facade 设置成其它版本,如 2.0.0。 +- dynamic-facade/pom.xml +```bash +dynamic-facade +2.0.0 +``` +- dynamic-provider/pom.xml +```bash +dynamic-provider +2.0.0 +``` +IDE**清除缓存**后,重启IDE。在IDE里增加-Dsofa.ark.embed.enable=true 启动参数,直接启动 StockMngApplication 类。 +启动成功后日志信息如下: + +访问 http://localhost:8080 ,现在展示的是默认的排列顺序,如下所示: +![image.png](https://gw.alipayobjects.com/mdn/rms_c69e1f/afts/img/A*HpKuR7Wn44UAAAAAAAAAAABkARQnAQ) \ No newline at end of file diff --git a/dynamic-provider/pom.xml b/dynamic-provider/pom.xml index 45b322f..0b8afa9 100644 --- a/dynamic-provider/pom.xml +++ b/dynamic-provider/pom.xml @@ -41,7 +41,7 @@ com.alipay.sofa sofa-ark-maven-plugin - 2.0.6 + 2.1.0 default-cli @@ -52,6 +52,7 @@ true + true ./target dynamic-provider provider diff --git a/dynamic-stock-mng/pom.xml b/dynamic-stock-mng/pom.xml index 7a5e863..f311ea8 100644 --- a/dynamic-stock-mng/pom.xml +++ b/dynamic-stock-mng/pom.xml @@ -82,6 +82,13 @@ com.alipay.sofa hessian + + + io.sofastack + dynamic-provider + ark-biz + 1.0.0 + diff --git a/pom.xml b/pom.xml index 0fa81c1..8c7b1a9 100644 --- a/pom.xml +++ b/pom.xml @@ -24,7 +24,7 @@ 1.8 - 2.0.6 + 2.1.0 2.9.1 1.3.2 5.1.46