diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/DemoCloudController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/DemoCloudController.java index f1909a8..fee0cc9 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/DemoCloudController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/DemoCloudController.java @@ -1,127 +1,127 @@ -//package cn.estsh.i3plus.core.apiservice.controller; -// -//import cn.estsh.i3plus.icloud.core.sdk.ICoreDemoCloud; -//import cn.estsh.i3plus.icloud.wms.sdk.IWmsDemoCloud; -//import cn.estsh.i3plus.pojo.base.bean.BaseBean; -//import cn.estsh.i3plus.pojo.base.bean.BaseModelBean; -//import cn.estsh.i3plus.pojo.base.bean.BaseResultBean; -//import cn.estsh.i3plus.pojo.base.common.Pager; -//import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; -//import cn.estsh.i3plus.pojo.platform.bean.SysRole; -//import cn.estsh.i3plus.pojo.platform.bean.SysUser; -//import cn.estsh.impp.framework.boot.util.ResultBean; -//import io.swagger.annotations.Api; -//import io.swagger.annotations.ApiOperation; -//import org.slf4j.Logger; -//import org.slf4j.LoggerFactory; -//import org.springframework.beans.factory.annotation.Autowired; -//import org.springframework.beans.factory.annotation.Value; -//import org.springframework.web.bind.annotation.*; -// -//import java.util.Map; -// -//@RestController -//@RequestMapping("/impp/cloud") -//@Api(description="分布式服务测试") -//public class DemoCloudController { -// -// private static final Logger LOGGER = LoggerFactory.getLogger(DemoCloudController.class); -// -// @Value("${server.port}") -// private String serverPort; -// -// @Value("${eureka.instance.ip-address}") -// private String ipAddress; -// -// @Autowired -// ICoreDemoCloud iCoreDemoCloud; -// -// @Autowired -// IWmsDemoCloud iWmsDemoCloud; -// -// @GetMapping(value="/test") -// @ApiOperation(value="core测试",notes = "core测试") -// public ResultBean testCore(String test) { -// LOGGER.info("{}:{},【impp-core接受数据】{}",ipAddress,serverPort,test); -// return ResultBean.success("返回:" + test).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); -// } -// -// @GetMapping(value="/test-wms") -// @ApiOperation(value="wms测试",notes = "wms测试") -// public ResultBean testWms(String test) { -// LOGGER.info("【{}:{},impp-core接受数据 -> wms】{}",ipAddress,serverPort,test); -// -// BaseResultBean result = iWmsDemoCloud.testWms(test); -// if(result.isSuccess()){ -// return ResultBean.success("wms返回:" + test).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); -// }else{ -// LOGGER.error("无法调用wms服务:{}",result.getErrorMsg()); -// return ResultBean.fail("调用wms服务出错:" + result.getErrorMsg()); -// } -// } -// -// @GetMapping(value="/test-get") -// @ApiOperation(value="测试get",notes = "测试get") -// public ResultBean testFeignGet(String test) { -// LOGGER.info("【impp-core-get接受数据】{}" ,test); -// return ResultBean.success("返回:" + test).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); -// } -// -// @PostMapping(value="/test-post") -// @ApiOperation(value="测试post",notes = "测试post") -// public ResultBean testFeignPost(String test) { -// LOGGER.info("【impp-core-post接受数据】{}" ,test); -// return ResultBean.success("返回:" + test).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); -// } -// -// @PutMapping(value="/test-put") -// @ApiOperation(value="put接受数据",notes = "put接受数据") -// public ResultBean testPut(String test,String name) { -// LOGGER.info("【impp-core-put接受数据】param1:{},param2:{}", test,name); -// return ResultBean.success("返回:" + test).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); -// } -// -// @DeleteMapping(value="/test-delete") -// @ApiOperation(value="delete接受数据",notes = "delete接受数据") -// public ResultBean testDelete( -// @RequestBody Pager pager, -// @RequestParam("test") String test) { -// LOGGER.info("【impp-core-delete接受数据】pager:{},test:{}",pager,test); -// return ResultBean.success("返回:" + test).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); -// } -// -// @PutMapping(value="/test-cloud-put") -// @ApiOperation(value="测试cloudput",notes = "测试cloudput") -// public ResultBean putTestCloud(String test,String name) { -// LOGGER.info("【impp-core-put接受数据】test:{},name:{}",test,name); -// return ResultBean.success("返回:" + test).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); -// } -// -// @PostMapping(value="/test-object") -// @ApiOperation(value="测试单对象") -// public ResultBean testObject(@RequestBody Pager pager) { -// LOGGER.info("【impp-core-object接受数据】{}" ,pager); -// return ResultBean.success("返回:" + pager).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); -// } -// -// @PostMapping(value="/test-map") -// @ApiOperation(value="测试get",notes = "测试get") -// public ResultBean testFeignMap(@RequestBody Map map) { -// LOGGER.info("【impp-core-map接受数据】{}" ,map); -// return ResultBean.success("返回:" + map).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); -// } -// -// @PostMapping(value="/test-arr") -// @ApiOperation(value="测试arr",notes = "测试arr") -// public ResultBean testFeignArr(@RequestBody String[] arr) { -// LOGGER.info("【impp-core-arr接受数据】{}" ,arr); -// return ResultBean.success("返回:" + arr).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); -// } -// -// @PostMapping(value="/test-more-object") -// @ApiOperation(value="测试多对象模型",notes = "测试多对象模型") -// public ResultBean testFeignMoreObj(@RequestBody BaseModelBean roleBean) { -// LOGGER.info("【impp-core-more-obj接受多对象模型】objBean:{},pager:{}" ,roleBean.getObj(),roleBean.getPager()); -// return ResultBean.success("返回:" + roleBean).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); -// } -//} +package cn.estsh.i3plus.core.apiservice.controller; + +import cn.estsh.i3plus.icloud.core.sdk.ICoreDemoCloud; +import cn.estsh.i3plus.icloud.wms.sdk.IWmsDemoCloud; +import cn.estsh.i3plus.pojo.base.bean.BaseBean; +import cn.estsh.i3plus.pojo.base.bean.BaseModelBean; +import cn.estsh.i3plus.pojo.base.bean.BaseResultBean; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; +import cn.estsh.i3plus.pojo.platform.bean.SysRole; +import cn.estsh.i3plus.pojo.platform.bean.SysUser; +import cn.estsh.impp.framework.boot.util.ResultBean; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; + +@RestController +@RequestMapping("/impp/cloud") +@Api(description="分布式服务测试") +public class DemoCloudController { + + private static final Logger LOGGER = LoggerFactory.getLogger(DemoCloudController.class); + + @Value("${server.port}") + private String serverPort; + + @Value("${eureka.instance.ip-address}") + private String ipAddress; + + @Autowired + ICoreDemoCloud iCoreDemoCloud; + + @Autowired + IWmsDemoCloud iWmsDemoCloud; + + @GetMapping(value="/test") + @ApiOperation(value="core测试",notes = "core测试") + public ResultBean testCore(String test) { + LOGGER.info("{}:{},【impp-core接受数据】{}",ipAddress,serverPort,test); + return ResultBean.success("返回:" + test).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } + + @GetMapping(value="/test-wms") + @ApiOperation(value="wms测试",notes = "wms测试") + public ResultBean testWms(String test) { + LOGGER.info("【{}:{},impp-core接受数据 -> wms】{}",ipAddress,serverPort,test); + + BaseResultBean result = iWmsDemoCloud.testWms(test); + if(result.isSuccess()){ + return ResultBean.success("wms返回:" + test).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }else{ + LOGGER.error("无法调用wms服务:{}",result.getErrorMsg()); + return ResultBean.fail("调用wms服务出错:" + result.getErrorMsg()); + } + } + + @GetMapping(value="/test-get") + @ApiOperation(value="测试get",notes = "测试get") + public ResultBean testFeignGet(String test) { + LOGGER.info("【impp-core-get接受数据】{}" ,test); + return ResultBean.success("返回:" + test).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } + + @PostMapping(value="/test-post") + @ApiOperation(value="测试post",notes = "测试post") + public ResultBean testFeignPost(String test) { + LOGGER.info("【impp-core-post接受数据】{}" ,test); + return ResultBean.success("返回:" + test).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } + + @PutMapping(value="/test-put") + @ApiOperation(value="put接受数据",notes = "put接受数据") + public ResultBean testPut(String test,String name) { + LOGGER.info("【impp-core-put接受数据】param1:{},param2:{}", test,name); + return ResultBean.success("返回:" + test).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } + + @DeleteMapping(value="/test-delete") + @ApiOperation(value="delete接受数据",notes = "delete接受数据") + public ResultBean testDelete( + @RequestBody Pager pager, + @RequestParam("test") String test) { + LOGGER.info("【impp-core-delete接受数据】pager:{},test:{}",pager,test); + return ResultBean.success("返回:" + test).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } + + @PutMapping(value="/test-cloud-put") + @ApiOperation(value="测试cloudput",notes = "测试cloudput") + public ResultBean putTestCloud(String test,String name) { + LOGGER.info("【impp-core-put接受数据】test:{},name:{}",test,name); + return ResultBean.success("返回:" + test).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } + + @PostMapping(value="/test-object") + @ApiOperation(value="测试单对象") + public ResultBean testObject(@RequestBody Pager pager) { + LOGGER.info("【impp-core-object接受数据】{}" ,pager); + return ResultBean.success("返回:" + pager).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } + + @PostMapping(value="/test-map") + @ApiOperation(value="测试get",notes = "测试get") + public ResultBean testFeignMap(@RequestBody Map map) { + LOGGER.info("【impp-core-map接受数据】{}" ,map); + return ResultBean.success("返回:" + map).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } + + @PostMapping(value="/test-arr") + @ApiOperation(value="测试arr",notes = "测试arr") + public ResultBean testFeignArr(@RequestBody String[] arr) { + LOGGER.info("【impp-core-arr接受数据】{}" ,arr); + return ResultBean.success("返回:" + arr).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } + + @PostMapping(value="/test-more-object") + @ApiOperation(value="测试多对象模型",notes = "测试多对象模型") + public ResultBean testFeignMoreObj(@RequestBody BaseModelBean roleBean) { + LOGGER.info("【impp-core-more-obj接受多对象模型】objBean:{},pager:{}" ,roleBean.getObj(),roleBean.getPager()); + return ResultBean.success("返回:" + roleBean).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/DemoEurekaController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/DemoEurekaController.java index 8813665..ae62e50 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/DemoEurekaController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/DemoEurekaController.java @@ -1,5 +1,6 @@ package cn.estsh.i3plus.core.apiservice.controller; +import cn.estsh.impp.framework.boot.eureka.EurekaClientHealthCheck; import cn.estsh.impp.framework.boot.util.ResultBean; import com.netflix.appinfo.ApplicationInfoManager; import com.netflix.appinfo.EurekaInstanceConfig; @@ -37,6 +38,9 @@ public class DemoEurekaController { @Autowired private ApplicationInfoManager applicationInfoManager; + @Autowired + private EurekaClientHealthCheck healthCheck; + /** * 停止微服 * @return @@ -50,7 +54,7 @@ public class DemoEurekaController { } /** - * 停止微服 + * 显示微服信息 * @return */ @GetMapping(value="/show") @@ -71,4 +75,30 @@ public class DemoEurekaController { return new ResultBean(true); } + + /** + * 改变微服状态 + * @return + */ + @GetMapping(value="/health-status") + @ApiOperation(value="微服健康状态",notes = "查看微服健康状态") + public ResultBean healthStatus() { + LOGGER.info("【微服状态】{}",healthCheck.isHealth()); + + return new ResultBean(true,"状态:" + healthCheck.isHealth()); + } + + /** + * 改变微服状态 + * @return + */ + @GetMapping(value="/change-status") + @ApiOperation(value="改变微服状态",notes = "改变微服状态(true,正常使用.false,停止使用)") + public ResultBean changeStatus(boolean status) { + LOGGER.info("【改变微服状态】{}",status); + + healthCheck.setHealth(status); + + return new ResultBean(true); + } } diff --git a/modules/i3plus-core-apiservice/src/main/resources/application-dev.properties b/modules/i3plus-core-apiservice/src/main/resources/application-dev.properties index f1b5449..200f57a 100644 --- a/modules/i3plus-core-apiservice/src/main/resources/application-dev.properties +++ b/modules/i3plus-core-apiservice/src/main/resources/application-dev.properties @@ -1,5 +1,22 @@ #项目端口 server.port=8100 +#本机ip +impp.server.ip=192.168.1.20 +#console控制台服务(zipkin追踪全路径) +impp.console.ip=http://192.168.1.20:8010 + +################ 功能配置1 ################ +#若无法连接注册中心,是否需要一直检测加入 +impp.cluster.fetch=false +#服务注册中心 +impp.cluster.regist.center=http://192.168.1.20:8000/eureka/ +#多注册中心 +#impp.cluster.regist.center=http://192.168.1.20:8000/eureka/,http://192.168.1.20:8001/eureka/ + +################ 功能配置2 ################ +#是否允许前端跨域提交impp.web.cross.hosts +impp.web.cross = true + ################ 授权过滤配置 ################ #用户登陆路径 filter.shiro.user.loginuri = /login @@ -15,35 +32,31 @@ filter.shiro.admin.filteruri = /adoperate/* #用户授权过滤路径 filter.shiro.saadmin.filteruri = /saoperate/* -################ 跨域提交 ################ -#是否允许前端跨域提交impp.web.cross.hosts -impp.web.cross = true - ################ 云配置 (以projectName作为应用名) ################ -#若无法连接注册中心,是否需要一直检测加入 -impp.cluster.fetch=false #是否开启微服 eureka.client.enabled=true #(参数配置)注册中心地址 -》 i3plus-ics,多个用逗号分隔 -eureka.client.service-url.defaultZone=http://192.168.1.20:8000/eureka/,http://192.168.1.20:8001/eureka/ +eureka.client.service-url.defaultZone=${impp.cluster.regist.center} #区域(源码中包含defaultZone,所以默认使用defaultZone) #eureka.client.region=estsh #eureka.client.service-url.estsh:http://192.168.1.20:8000/eureka/,http://192.168.1.20:8001/eureka/ -#### 本机微服配置 #### +################ 本机微服配置 ################ #本服务主机ip(若多个网卡,则需要设置本服务ip) -eureka.instance.ip-address=192.168.1.20 +eureka.instance.ip-address=${impp.server.ip} #本服务实例ID -#eureka.instance.instance-id=${eureka.instance.ip-address}:${server.port} +eureka.instance.instance-id=${impp.server.ip}:${server.port} #本服务主机名 -#eureka.instance.hostname=${eureka.instance.ip-address} +eureka.instance.hostname=${impp.server.ip} #本服务状态页面 -eureka.instance.status-page-url=http://${eureka.instance.ip-address}:${server.port}/swagger-ui.html +eureka.instance.status-page-url=http://${impp.server.ip}:${server.port}/swagger-ui.html #将自己的IP注册到Eureka Server。若不配置或设置为false,表示注册微服务所在操作系统的hostname到Eureka Server eureka.instance.prefer-ip-address=true +#是否进行健康检查 +eureka.client.healthcheck.enabled=true -#### 检测机制 #### -#心跳间隔周期,宕机限制(秒),90秒没反应视为宕机 +################ 检测机制 ################ +#心跳间隔周期,宕机限制(秒),30秒没反应视为宕机 eureka.instance.lease-expiration-duration-in-seconds=30 #心跳周期 eureka.instance.lease-renewal-interval-in-seconds=20 @@ -62,9 +75,11 @@ hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=5000 #集群名 eureka.instance.metadata-map.cluster=impp_cluster -#### 链路追踪 #### +################ 链路追踪 ################ +#使用web方式传输信息 +spring.zipkin.sender.type=web #链路追踪服务的地址 -spring.zipkin.base-url=http://192.168.1.20:8010 +spring.zipkin.base-url=${impp.console.ip} #追踪深度,百分比,1是全部 spring.sleuth.sampler.probability=1.0 diff --git a/modules/i3plus-core-apiservice/src/main/resources/application-test.properties b/modules/i3plus-core-apiservice/src/main/resources/application-test.properties index 6355e6e..7a27313 100644 --- a/modules/i3plus-core-apiservice/src/main/resources/application-test.properties +++ b/modules/i3plus-core-apiservice/src/main/resources/application-test.properties @@ -41,6 +41,8 @@ eureka.instance.ip-address=192.168.1.20 eureka.instance.status-page-url=http://${eureka.instance.ip-address}:${server.port}/swagger-ui.html #将自己的IP注册到Eureka Server。若不配置或设置为false,表示注册微服务所在操作系统的hostname到Eureka Server eureka.instance.prefer-ip-address=true +#是否进行健康检查 +eureka.client.healthcheck.enabled=true #### 检测机制 #### #心跳间隔周期,宕机限制(秒),90秒没反应视为宕机