| 模块 | 配置项 | 数据类型 | 默认值 | 说明 |
| core |
acp.core.deleteFileWaitTime |
Long |
1200000 |
延迟删除文件等待时间(单位毫秒),默认:1200000 |
| acp.core.absPathPrefix |
String |
abs: |
绝对路径前缀,默认:"abs:" |
| acp.core.userPathPrefix |
String |
user: |
用户路径前缀,默认:"user:" |
| acp.core.fontPath |
String |
files/resource/font |
字体文件夹路径,默认:"files/resource/font" |
| controller-log |
acp.controller-log.enabled |
Boolean |
true |
是否启用,默认:true |
| acp.controller-log.noLogUriRegular |
List<String> |
empty |
不进行日志记录的url正则表达式数组 |
| schedule |
acp.schedule.cron |
Map<String,String> |
empty |
cron表达式Map。key=Bean名称,value=cron表达式 |
| tcp-server |
acp.tcp-server.listeners |
List<SocketListenerConfiguration> |
empty |
Socket TCP 监听列表 |
| udp-server |
acp.tcp-server.listeners |
List<SocketListenerConfiguration> |
empty |
Socket UDP 监听列表 |
| SocketListenerConfiguration; prefix:acp.tcp-server.listeners or acp.tcp-server.listeners |
name |
String |
Default Socket Listener |
名称 |
| threadNumber |
Integer |
0 |
线程数 |
| enabled |
Boolean |
false |
是否启用 |
| keepAlive |
Boolean |
false |
是否长连接 |
| idletime |
Long |
10000 |
空闲等待时间(单位毫秒) |
| port |
Integer |
0 |
监听端口 |
| hex |
Boolean |
false |
是否16进制报文 |
| messageDecoder |
String |
|
消息解码器Bean名称 |
| handleBean |
String |
|
消息处理Bean名称 |
| responsible |
Boolean |
true |
是否需要响应 |
| charset |
String |
utf-8 |
字符编码 |
| ftp-server |
acp.ftp-server.listeners |
List<FtpListener> |
empty |
Ftp服务监听配置列表 |
| FtpListener; prefix:acp.ftp-server.listeners |
name |
String |
|
服务名 |
| enabled |
Boolean |
false |
是否启用,默认false |
| port |
Integer |
0 |
服务端口号 |
| anonymousLoginEnabled |
Boolean |
false |
可空,是否允许匿名用户登录,默认false |
| pwdEncryptMode |
String |
MD5 |
用户密码加密方式(支持MD5、SHA1、SHA256),默认MD5 |
| loginFailureDelay |
Integer |
30 |
|
| maxLoginFailures |
Integer |
20 |
|
| maxLogins |
Integer |
10 |
|
| maxAnonymousLogins |
Integer |
20 |
|
| maxThreads |
Integer |
10 |
|
| defaultHomeDirectory |
String |
|
默认根路径 |
| anonymousWritePermission |
Boolean |
false |
可空,是否允许匿名用户写操作,默认false |
| userFactoryClass |
String |
|
用户工厂类名 |
### (三)启停 springboot 应用
- [jvm 参考参数](doc/jvm-params.txt)
- [启停脚本(Linux) server.sh](doc/script/server.sh),根据实际情况修改第2行 APP_NAME 和第3行 JVM_PARAM 的值即可,和
SpringBoot 应用的 .jar 放在同一路径下
- [启停脚本(windows) server.bat](doc/script/server.bat),根据实际情况修改第1行末尾需要执行的 jar 名称,和SpringBoot应用的
.jar 放在同一路径下
- Linux 命令:
| 命令 | 描述 |
|---------------------|----------|
| ./server.sh | 查看可用参数 |
| ./server.sh status | 查看系统运行状态 |
| ./server.sh start | 启动应用 |
| ./server.sh stop | 停止应用 |
| ./server.sh restart | 重启应用 |
## 五、开发 SpringCloud 应用
demo 位于 test/cloud 下,使用 acp-dependency 进行版本管理,例如:
```groovy
dependencyManagement {
imports {
mavenBom("io.gitee.zhangbinhub.acp:acp-dependency:version")
}
}
```
### (一)模块说明
##### 1. acp-spring-cloud-starter
原子服务公共模块:
- (1)自定义程序入口注解
- (2)自定义 feign 并发策略、自定义 feign 请求拦截
- (3)封装日志服务客户端,发送日志消息至 kafka
##### 2. acp-spring-cloud-starter-resource-server
资源服务自动配置模块:
- (1)自定义程序入口注解
- (2)自动配置资源服务安全策略
##### 测试模块
###### 1. test/cloud/admin-server
监控界面
###### 2. test/cloud/gateway-server
网关服务
###### 3. test/cloud/oauth-server
统一认证服务:token 存储于 Redis,user 及 client 信息可扩展配置
| url | 描述 |
|-----------------------|------------------------------------------------------|
| /oauth/authorize | 申请授权,basic认证保护 |
| /oauth/token | 获取token的服务,url中没有client_id和client_secret的,走basic认证保护 |
| /oauth/check_token | 资源服务器用来校验token,basic认证保护 |
| /oauth/confirm_access | 授权确认,basic认证保护 |
| /oauth/error | 认证失败,无认证保护 |
[查看认证过程](doc/oauth认证.md)
###### 4. test/cloud/log-server
日志服务,使用 kafka 作为日志消息队列
###### 5. test/cloud/helloworld
原子服务,分别调用 hello 和 world
###### 6. test/cloud/helloworld-reactive
原子服务,分别调用 hello 和 world
###### 7. test/cloud/hello
原子服务
###### 8. test/cloud/world
原子服务
### (二)基础中间件环境搭建
- 必要基础中间件包括:nacos、redis、redisinsight、zookeeper、kafka、kafka-eagle、zipkin
- 可选基础中间件包括:elasticsearch、logstash、kibana
- 参考对应的[docker-compose](test/cloud/docker)文件
### (三)组件开发
##### 全局说明
- 统一注入 io.gitee.zhangbinhub.acp.boot.interfaces.LogAdapter 进行日志记录
##### 1. 可视化监控
- test/cloud/admin-server
- (1)依赖 acp-spring-cloud-starter
- (2)无需改动代码
- (3)修改 yml 配置即可
##### 2. 网关服务
- test/cloud/gateway-server
- (1)需自定义限流策略(需依赖 Redis)
- (2)修改 yml 进行路由配置;若没有 Redis 请不要配置限流策略
##### 3. 认证服务
- test/cloud/oauth-server
- (1)依赖
- acp-spring-cloud-starter-resource-server
- org.springframework.security:spring-security-oauth2-authorization-server
- org.springframework.boot:spring-boot-starter-data-redis
- (2)入口类增加注解 @AcpCloudAtomApplication
- (3)基于 spring-security-oauth2-authorization-server 深度定制 grant_type=password 模式
##### 4. 日志服务(依赖 kafka)
- (1)依赖 acp-spring-cloud-starter-resource-server
- (2)入口类增加注解 @AcpCloudResourceServerApplication
- (3)如需自定义日志消息处理,新增Bean实现 io.gitee.zhangbinhub.acp.cloud.log.consumer.LogProcess 接口,并且增加 @Primary
注解
- (4)根据各服务配置的日志类型(默认为"ALL"),在 logback-spring.xml 中参照 ALL 和 ALL-LOGSTASH 进行配置
- a. 配置两个 appender(一个输出到本地文件,一个输出到logstash;单独配置的目的是为了将不同类型的日志写入不同名称的文件并在elasticsearch中创建不同的索引)
- b. 之后再配置一个 logger (name属性为某个日志类型),包含之前配置的两个 appender
- c. 强烈建议 logback-spring.xml 中配置的本地日志文件路径需与 yml 中的 logging.file.path 一致,方便统一管理
- (5)增加配置
```yaml
acp:
cloud:
log-server:
enabled: true #是否开启日志服务
```
##### 5. 原子服务
- (1)依赖 acp-spring-cloud-starter-resource-server
- (2)参考 四、开发 SpringBoot 应用
- (3)原子服务即 SpringBoot 应用,引入额外的 spring-cloud 包,并在 yml 中增加相应配置
- (4)参考 test/cloud/hello、test/cloud/world、test/cloud/helloworld,入口类增加注解 @AcpCloudResourceServerApplication
- (5)进行日志服务配置
```yaml
acp:
cloud:
log-server:
client:
enabled: true #是否启用日志服务
log-type: ALL #当前服务的日志类型,默认ALL,也自定义;自定义的类型需要在日志服务中参照ALL配置appender和logger
```
- (6)如有特殊需要不进行认证的url(例如"/customer"),则增加permit-all-path配置;如有需要进行认证的url(例如"
/customer2"
),则增加security-path配置
```yaml
acp:
cloud:
resource-server:
permit-all-path:
- /customer
security-path:
- /customer2
```
- (7)`cloud:acp-spring-cloud-starter-resource-server`中强制开启了`Http Basic`认证,保护`/actuator`接口
- 认证用户名和密码使用`acp.cloud.resource-server.client-id`和`acp.cloud.resource-server.client-secret`配置项
- 注册服务时需要将这两个配置项以源数据的形势`user.name`和`user.password`
上送给注册中心,以便监控系统能够正常访问`/actuator`(例如`Spring Boot Admin`)
- (8)如果原子服务不需要加入统一认证体系中,即不需要进行访问权限验证。
- ```cloud:acp-spring-cloud-starter-resource-server```依赖改为```cloud:acp-spring-cloud-starter```
- 入口类注解```AcpCloudResourceServerApplication```改为```AcpCloudAtomApplication```
##### 6. 配置附录
| 模块 | 配置项 | 数据类型 | 默认值 | 说明 |
| log server |
acp.cloud.log-server.groupId |
String |
acp_cloud_log_server_group_id |
消费日志消息的组id,多个日志服务使用相同的组id,能够保证日志消息不被重复消费,默认:"acp_cloud_log_server_group_id" |
| acp.cloud.log-server.enabled |
Boolean |
false |
当前服务是否是日志服务,默认:false |
| acp.cloud.log-server.destination |
String |
acp_cloud_log_server_message_topic |
日志消息的topic名称(队列名称),默认:"acp_cloud_log_server_message_topic" |
| acp.cloud.log-server.client.enabled |
Boolean |
enabled |
是否启用日志服务客户端,默认:false |
| acp.cloud.log-server.client.logType |
String |
ALL |
日志类型,默认:"ALL" |
| acp.cloud.resource-server.client-id |
String |
acp_cloud_resource_server_client_id |
资源服务认证使用的clientId |
| acp.cloud.resource-server.client-secret |
String |
acp_cloud_resource_server_client_secret |
资源服务认证使用的clientSecret |
| acp.cloud.resource-server.permit-all-path |
List<String> |
empty |
不进行权限校验的 url path |
| acp.cloud.resource-server.security-path |
List<String> |
empty |
进行权限保护的 url path |
##### 7. postman 测试
[Acp Test Cloud.postman_collection.json](doc/Acp%20Test%20Cloud.postman_collection.json)
## 六、打包为 docker 镜像
- 打包:`buildImage`
- 打包并上传:`pushImage`
## 七、[Sentinel 动态数据源配置](doc/sentinel.md)