【云原生技术】Smart-Sugar的`<url>` 参数支持同时上传到两个 URL吗?


结论先行
<url> 参数的数据类型是 String,一次只能填一个地址,因此“同一次执行自动同时上传到两个 URL” 插件默认不支持
• 想发给多套服务端,可用下面 3 种曲线救国办法,任选其一:


方案 1 在同一个 plugin 里声明 多次 execution

Maven 允许同一插件在同一项目中执行多次,每次 execution 可以带自己的一组 <configuration>
Smart-Sugar 的 tree(或 upload)goal 不依赖其他 goal 输出,所以可以安全地跑多次。

<plugin>
  <groupId>com.cupdata.sinka</groupId>
  <artifactId>smart-sugar-maven-plugin</artifactId>
  <version>1.7-RC3</version>

  <executions>

    <!-- 第一次:主服务器 -->
    <execution>
      <id>upload-main</id>
      <phase>verify</phase>
      <goals><goal>tree</goal></goals>
      <configuration>
        <url>http://10.188.40.116:9999/smartsugar/api/tree</url>
      </configuration>
    </execution>

    <!-- 第二次:备份服务器 -->
    <execution>
      <id>upload-backup</id>
      <phase>verify</phase>  <!-- 也可以改成 deploy 等别的生命周期 -->
      <goals><goal>tree</goal></goals>
      <configuration>
        <url>http://backup.example.com:8080/smartsugar/api/tree</url>
      </configuration>
    </execution>

  </executions>
</plugin>

执行一次 mvn clean verify 就会 顺序 调用两次 goal,各自向不同 URL 发送相同 JSON。
缺点:构建日志会打印两遍;若依赖树很大,序列化会重复耗时几秒。


方案 2 CI/脚本里 跑两次插件,每次改系统属性

# 主服务器
mvn smart-sugar:tree -Dsugar.url=http://10.188.40.116:9999/smartsugar/api/tree

# 备份服务器
mvn smart-sugar:tree -Dsugar.url=http://backup.example.com:8080/smartsugar/api/tree

好处:无需改 POM;哪怕不想污染正式仓库,也能在流水线里实现多端上传。
缺点:需要跑两条命令;如果项目很大,依赖计算时间会重复花费(同方案 1)。


方案 3 服务器侧做 HTTP“镜像”转发

如果你能改主服务器或网关配置,可让它收到 POST 后自动复制请求到 N 个后端。
常见做法:
• Nginx mirror 指令

location /smartsugar/api/tree {
    mirror /mirror_backend;                    # 复制请求
    proxy_pass http://main_backend;            # 原路继续
}
location /mirror_backend {
    internal;                                  # 外部不可直接访问
    proxy_pass http://backup.example.com:8080;
}

• 或 API 网关 / ServiceMesh 的流量复制功能
优点:构建端只发一次,网络/CPU 开销最小;后端想加多少台都不改客户端。
缺点:需要运维权限,且镜像失败时主请求不受影响,备份可能丢失。


为什么直接写两个 <url> 不行?

插件源码里大致是:

@Parameter(name = "url", required = true)
private String url;
...
HttpPost post = new HttpPost(url);   // 只接受一个字符串

也就是单值字段;不支持逗号分隔、数组或多标签,所以必须靠上面三种办法间接实现。


小结

• 插件原生只能接收 一个 URL。
• 想多目标上传:

  1. 在 POM 里配置多个 <execution>
  2. 或者用 CI/脚本跑两次并用 -Dsugar.url= 覆盖;
  3. 最彻底的做法是在服务器或网关层面做请求镜像。
    根据你的控制范围和可接受的构建时长选择即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿寻寻

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值