feat(elevator): 部署与 V1 对齐 Consul,Ribbon 固定 ninca-crk-std

- bootstrap:discovery.enabled=false、注册字段与 access-control,与 V1 fat-jar 一致(宿主机仍 192.168.3.12)
- application:v2-maven 使用 elevator-app、tomcat UTF-8;注释与静态 Ribbon 说明
- 新增 NincaCrkStdRibbonConfiguration + @RibbonClient,避免 Edgware 下 Feign 无可用实例
- deploy README 更新 Consul / ninca-crk-std 说明

Made-with: Cursor

Former-commit-id: 0a6ac9552cb18403816120113c56f13876a5a11f
This commit is contained in:
反编译工作区
2026-04-28 01:16:52 +08:00
parent 418c7db202
commit 824305aebf
7 changed files with 64 additions and 12 deletions
@@ -1,15 +1,20 @@
package cn.cloudwalk.elevator;
import cn.cloudwalk.event.EnableCloudwalkEvent;
import cn.cloudwalk.ribbon.NincaCrkStdRibbonConfiguration;
import com.github.pagehelper.autoconfigure.PageHelperAutoConfiguration;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.cloud.netflix.feign.EnableFeignClients;
import org.springframework.cloud.netflix.ribbon.RibbonClient;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
import org.springframework.scheduling.annotation.EnableAsync;
/** Ribbon 名称需与 {@code feign.ninca-crk-std.name} 及 Feign Client 一致。 */
@RibbonClient(name = "${feign.ninca-crk-std.name:ninca-crk-std}",
configuration = NincaCrkStdRibbonConfiguration.class)
@EnableCloudwalkEvent
@EnableAsync
@EnableCaching
@@ -0,0 +1,23 @@
package cn.cloudwalk.ribbon;
import com.netflix.client.config.IClientConfig;
import com.netflix.loadbalancer.ConfigurationBasedServerList;
import com.netflix.loadbalancer.Server;
import com.netflix.loadbalancer.ServerList;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* 为 Feign 客户端 {@code ninca-crk-std} 强制使用配置型 ServerList,避免 Consul 发现返回空列表时覆盖
* {@code ninca-crk-std.ribbon.listOfServers}Edgware 下常见「Load balancer does not have available server」)。
*/
@Configuration
public class NincaCrkStdRibbonConfiguration {
@Bean
public ServerList<Server> ribbonServerList(IClientConfig config) {
ConfigurationBasedServerList list = new ConfigurationBasedServerList();
list.initWithNiwsConfig(config);
return list;
}
}
@@ -39,10 +39,14 @@ cd v2-maven && ./run.sh
## Consul`192.168.3.12` Docker
本仓库在 **`v1-legacy/bootstrap.properties`**、**`v2-maven/bootstrap.properties`** 中写入:
本仓库在 **`v1-legacy/bootstrap.properties`**、**`v2-maven/bootstrap.properties`** 中写入,并与 **V1 运行包 `bootstrap.properties` 中 Consul 段**对齐
- `spring.cloud.consul.host=192.168.3.12`
- `spring.cloud.consul.port=8500`
- `spring.cloud.consul.enabled=true`
- `spring.cloud.consul.discovery.register=true`
- **`spring.cloud.consul.discovery.enabled=false`**(与 V1 一致:不作为 Consul **客户端**做服务发现)
- `spring.profiles.active=access-control`(与 V1 一致)
用于覆盖 fat-jar 内 **`10.128.161.95:8500`**,与 **`deploy/consul-docker`**`hashicorp/consul:1.22`)对齐。在同一目录执行 `./run.sh` 时,Spring Cloud 会加载上述 **`bootstrap.properties`**。
@@ -50,11 +54,9 @@ cd v2-maven && ./run.sh
**说明**jar 内 **Dubbo / ZooKeeper** 仍可能指向旧 IP(如 `10.128.161.95:2181`);若启动报 ZK 连接失败,需在 **`application.properties`** 中另行改 Dubbo 注册中心(本次仅处理 Consul)。
### Feign `ninca-crk-std`Ribbon / Consul
### Feign `ninca-crk-std`Ribbon
若日志出现 **`Load balancer does not have available server for client: ninca-crk-std`**,表示 **Consul 里没有名为 `ninca-crk-std` 的注册实例**,而 Feign 默认用 **Consul 服务发现**拉实例列表
**做法**:① 在目标环境启动 **`ninca-crk-std`(访客标准服务)** 并注册到同一 Consul;或 ② 在 **`application.properties`** 中使用 **Ribbon 静态列表**(已增加 `ninca-crk-std.ribbon.NIWSServerListClassName``listOfServers`,默认与 `ninca-crk-std.ip` 一致),把 **`listOfServers`** 改成你实际可访问的 **`主机:端口`**。
**`spring.cloud.consul.discovery.enabled=false`**(与 V1 对齐)时,不从 Consul 拉 **`ninca-crk-std`** 实例,需在 **`application.properties`** 中配置 **Ribbon 静态列表**`ninca-crk-std.ribbon.*``ninca-crk-std.ip`),按环境改成可访问的 **`主机:端口`**。Maven 构建的 `cw-elevator-application-2.0.0.jar` 另含 `NincaCrkStdRibbonConfiguration`,避免 Edgware 下静态列表被忽略
## Redis 与 `SPRING_APPLICATION_JSON`
@@ -1,5 +1,6 @@
# deploy/v1-legacy \uFF1A\u5386\u53F2\u5305 cw-elevator-application-V1.0.0.20211103.jar\uFF08\u540C\u76EE\u5F55\u542F\u52A8\uFF09
server.port=18080
server.tomcat.uri-encoding=UTF-8
spring.application.name=elevator-app
# OpenFeign 2.1.x\uFF1A\u591A\u4E2A @FeignClient \u5171\u540C name \u5360\u4F4D\u7B26\u65F6\u91CD\u590D\u6CE8\u518C FeignClientSpecification\uFF0C\u4E0E Spring \u9519\u8BEF\u63D0\u793A\u4E00\u81F4
spring.main.allow-bean-definition-overriding=true
@@ -80,8 +81,7 @@ feign.device.name=cwos-portal
feign.resource.name=cwos-portal
feign.cwos-portal.name=cwos-portal
feign.ninca-crk-std.name=ninca-crk-std
# Feign/Ribbon 默认从 Consul 按服务名发现 ninca-crk-stdConsul 无注册时出现「Load balancer does not have available server」。
# 以下两行改为静态 ServerList(与下行 ninca-crk-std.ip 同目标时保持一致;若访客服务只部署在其它 IP/端口请一起修改):
# bootstrap \u5DF2\u4E0E V1 fat-jar \u5185\u7F6E\uFF1AConsul \u53D1\u73B0\u5173\u95ED\u3002\u9759\u6001 Ribbon \u4E0E ninca-crk-std.ip \u6309\u73AF\u5883\u4E00\u81F4\u4FEE\u6539\u3002
ninca-crk-std.ribbon.NIWSServerListClassName=com.netflix.loadbalancer.ConfigurationBasedServerList
ninca-crk-std.ribbon.listOfServers=10.128.161.95:16106
feign.davinci-portal.name=cwos-portal
@@ -1,4 +1,13 @@
# 与 JAR 同目录,Spring Cloud 会加载本文件,覆盖 jar 内 bootstrap.properties 中的旧 Consul 地址
# 对应 192.168.3.12 上 Docker: hashicorp/consul:1.228500
# 与 JAR 同目录,覆盖 jar 内 bootstrapConsul 段与 V1 运行包对齐
# Dubbo/ZooKeeper 仅 V1 fat-jar 内嵌使用;若启动报 ZK 相关错误再于外置 application 中处理。
spring.cloud.consul.host=192.168.3.12
spring.cloud.consul.port=8500
spring.cloud.consul.enabled=true
spring.cloud.consul.discovery.register=true
spring.cloud.consul.discovery.enabled=false
spring.cloud.consul.discovery.prefer-ip-address=true
spring.cloud.consul.discovery.instance-id=${spring.application.name}-${spring.cloud.client.ipAddress}:${server.port}
spring.cloud.consul.discovery.ip-address=${spring.cloud.client.ipAddress}
spring.cloud.consul.discovery.deregister=false
spring.profiles.active=access-control
@@ -1,6 +1,7 @@
# deploy/v2-maven \uFF1Amaven \u6784\u5EFA cw-elevator-application-2.0.0.jar\uFF08\u540C\u76EE\u5F55\u542F\u52A8\uFF09
server.port=18081
spring.application.name=cw-elevator-application
server.tomcat.uri-encoding=UTF-8
spring.application.name=elevator-app
# Boot 1.5 \u65E0 spring.main.allow-bean-definition-overriding\uFF1B\u82E5\u91CD\u590D Bean \u9700\u5728\u4EE3\u7801\u4FA7\u6D88\u6B67\u4E49\u6216\u5347\u7EA7 Spring Boot
@@ -80,7 +81,8 @@ feign.device.name=cwos-portal
feign.resource.name=cwos-portal
feign.cwos-portal.name=cwos-portal
feign.ninca-crk-std.name=ninca-crk-std
# 见 v1-legacy 同段注释:Consul 无 ninca-crk-std 时用静态 Ribbon 列表。
# bootstrap \u5DF2\u4E0E V1 \u5BF9\u9F50 spring.cloud.consul.discovery.enabled=false\uFF08\u4E0D\u4ECE Consul \u62C9\u5B9E\u4F8B\uFF09\u3002
# Feign \u8D70 Ribbon \u65F6\u4ECD\u9700\u9759\u6001\u5B9E\u4F8B\uFF08V1 \u8FD0\u884C\u5305\u672A\u5199\u6B64\u6BB5\uFF0CV2 \u8865\u9F50\u5E76\u914D NincaCrkStdRibbonConfiguration\uFF09\u3002\u4E0E ninca-crk-std.ip \u4E00\u540C\u6309\u73AF\u5883\u6539\u3002
ninca-crk-std.ribbon.NIWSServerListClassName=com.netflix.loadbalancer.ConfigurationBasedServerList
ninca-crk-std.ribbon.listOfServers=10.128.161.95:16106
feign.davinci-portal.name=cwos-portal
@@ -1,3 +1,14 @@
# 覆盖 fat-jar 内嵌 Consul 地址,指向局域网 Docker Consul。
# 与 V1 运行包 cw-elevator-application-V1.0.0.20211103/bootstrap.properties 中 Consul 段对齐
# Dubbo/ZooKeeperV1 fat-jar 内含 dubbo 注册地址,本 Maven V2 工程未使用 Dubbo,故不写 zookeeper 段。
# Consul 宿主机按本环境(局域网 Docker)覆盖。
spring.cloud.consul.host=192.168.3.12
spring.cloud.consul.port=8500
spring.cloud.consul.enabled=true
spring.cloud.consul.discovery.register=true
spring.cloud.consul.discovery.enabled=false
spring.cloud.consul.discovery.prefer-ip-address=true
spring.cloud.consul.discovery.instance-id=${spring.application.name}-${spring.cloud.client.ipAddress}:${server.port}
spring.cloud.consul.discovery.ip-address=${spring.cloud.client.ipAddress}
spring.cloud.consul.discovery.deregister=false
spring.profiles.active=access-control