集群心跳机制

yun-zuoyi
frin.fei 7 years ago
parent 65d633bad9
commit ddd1be828c

@ -1,127 +1,127 @@
//package cn.estsh.i3plus.core.apiservice.controller; package cn.estsh.i3plus.core.apiservice.controller;
//
//import cn.estsh.i3plus.icloud.core.sdk.ICoreDemoCloud; import cn.estsh.i3plus.icloud.core.sdk.ICoreDemoCloud;
//import cn.estsh.i3plus.icloud.wms.sdk.IWmsDemoCloud; import cn.estsh.i3plus.icloud.wms.sdk.IWmsDemoCloud;
//import cn.estsh.i3plus.pojo.base.bean.BaseBean; import cn.estsh.i3plus.pojo.base.bean.BaseBean;
//import cn.estsh.i3plus.pojo.base.bean.BaseModelBean; import cn.estsh.i3plus.pojo.base.bean.BaseModelBean;
//import cn.estsh.i3plus.pojo.base.bean.BaseResultBean; import cn.estsh.i3plus.pojo.base.bean.BaseResultBean;
//import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.base.common.Pager;
//import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil;
//import cn.estsh.i3plus.pojo.platform.bean.SysRole; import cn.estsh.i3plus.pojo.platform.bean.SysRole;
//import cn.estsh.i3plus.pojo.platform.bean.SysUser; import cn.estsh.i3plus.pojo.platform.bean.SysUser;
//import cn.estsh.impp.framework.boot.util.ResultBean; import cn.estsh.impp.framework.boot.util.ResultBean;
//import io.swagger.annotations.Api; import io.swagger.annotations.Api;
//import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
//import org.slf4j.Logger; import org.slf4j.Logger;
//import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
//import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
//import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
//
//import java.util.Map; import java.util.Map;
//
//@RestController @RestController
//@RequestMapping("/impp/cloud") @RequestMapping("/impp/cloud")
//@Api(description="分布式服务测试") @Api(description="分布式服务测试")
//public class DemoCloudController { public class DemoCloudController {
//
// private static final Logger LOGGER = LoggerFactory.getLogger(DemoCloudController.class); private static final Logger LOGGER = LoggerFactory.getLogger(DemoCloudController.class);
//
// @Value("${server.port}") @Value("${server.port}")
// private String serverPort; private String serverPort;
//
// @Value("${eureka.instance.ip-address}") @Value("${eureka.instance.ip-address}")
// private String ipAddress; private String ipAddress;
//
// @Autowired @Autowired
// ICoreDemoCloud iCoreDemoCloud; ICoreDemoCloud iCoreDemoCloud;
//
// @Autowired @Autowired
// IWmsDemoCloud iWmsDemoCloud; IWmsDemoCloud iWmsDemoCloud;
//
// @GetMapping(value="/test") @GetMapping(value="/test")
// @ApiOperation(value="core测试",notes = "core测试") @ApiOperation(value="core测试",notes = "core测试")
// public ResultBean testCore(String test) { public ResultBean testCore(String test) {
// LOGGER.info("{}{}【impp-core接受数据】{}",ipAddress,serverPort,test); LOGGER.info("{}{}【impp-core接受数据】{}",ipAddress,serverPort,test);
// return ResultBean.success("返回:" + test).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); return ResultBean.success("返回:" + test).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode());
// } }
//
// @GetMapping(value="/test-wms") @GetMapping(value="/test-wms")
// @ApiOperation(value="wms测试",notes = "wms测试") @ApiOperation(value="wms测试",notes = "wms测试")
// public ResultBean testWms(String test) { public ResultBean testWms(String test) {
// LOGGER.info("【{}{}impp-core接受数据 -> wms】{}",ipAddress,serverPort,test); LOGGER.info("【{}{}impp-core接受数据 -> wms】{}",ipAddress,serverPort,test);
//
// BaseResultBean result = iWmsDemoCloud.testWms(test); BaseResultBean result = iWmsDemoCloud.testWms(test);
// if(result.isSuccess()){ if(result.isSuccess()){
// return ResultBean.success("wms返回" + test).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); return ResultBean.success("wms返回" + test).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode());
// }else{ }else{
// LOGGER.error("无法调用wms服务{}",result.getErrorMsg()); LOGGER.error("无法调用wms服务{}",result.getErrorMsg());
// return ResultBean.fail("调用wms服务出错" + result.getErrorMsg()); return ResultBean.fail("调用wms服务出错" + result.getErrorMsg());
// } }
// } }
//
// @GetMapping(value="/test-get") @GetMapping(value="/test-get")
// @ApiOperation(value="测试get",notes = "测试get") @ApiOperation(value="测试get",notes = "测试get")
// public ResultBean testFeignGet(String test) { public ResultBean testFeignGet(String test) {
// LOGGER.info("【impp-core-get接受数据】{}" ,test); LOGGER.info("【impp-core-get接受数据】{}" ,test);
// return ResultBean.success("返回:" + test).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); return ResultBean.success("返回:" + test).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode());
// } }
//
// @PostMapping(value="/test-post") @PostMapping(value="/test-post")
// @ApiOperation(value="测试post",notes = "测试post") @ApiOperation(value="测试post",notes = "测试post")
// public ResultBean testFeignPost(String test) { public ResultBean testFeignPost(String test) {
// LOGGER.info("【impp-core-post接受数据】{}" ,test); LOGGER.info("【impp-core-post接受数据】{}" ,test);
// return ResultBean.success("返回:" + test).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); return ResultBean.success("返回:" + test).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode());
// } }
//
// @PutMapping(value="/test-put") @PutMapping(value="/test-put")
// @ApiOperation(value="put接受数据",notes = "put接受数据") @ApiOperation(value="put接受数据",notes = "put接受数据")
// public ResultBean testPut(String test,String name) { public ResultBean testPut(String test,String name) {
// LOGGER.info("【impp-core-put接受数据】param1:{},param2:{}", test,name); LOGGER.info("【impp-core-put接受数据】param1:{},param2:{}", test,name);
// return ResultBean.success("返回:" + test).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); return ResultBean.success("返回:" + test).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode());
// } }
//
// @DeleteMapping(value="/test-delete") @DeleteMapping(value="/test-delete")
// @ApiOperation(value="delete接受数据",notes = "delete接受数据") @ApiOperation(value="delete接受数据",notes = "delete接受数据")
// public ResultBean testDelete( public ResultBean testDelete(
// @RequestBody Pager pager, @RequestBody Pager pager,
// @RequestParam("test") String test) { @RequestParam("test") String test) {
// LOGGER.info("【impp-core-delete接受数据】pager:{},test:{}",pager,test); LOGGER.info("【impp-core-delete接受数据】pager:{},test:{}",pager,test);
// return ResultBean.success("返回:" + test).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); return ResultBean.success("返回:" + test).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode());
// } }
//
// @PutMapping(value="/test-cloud-put") @PutMapping(value="/test-cloud-put")
// @ApiOperation(value="测试cloudput",notes = "测试cloudput") @ApiOperation(value="测试cloudput",notes = "测试cloudput")
// public ResultBean putTestCloud(String test,String name) { public ResultBean putTestCloud(String test,String name) {
// LOGGER.info("【impp-core-put接受数据】test:{},name:{}",test,name); LOGGER.info("【impp-core-put接受数据】test:{},name:{}",test,name);
// return ResultBean.success("返回:" + test).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); return ResultBean.success("返回:" + test).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode());
// } }
//
// @PostMapping(value="/test-object") @PostMapping(value="/test-object")
// @ApiOperation(value="测试单对象") @ApiOperation(value="测试单对象")
// public ResultBean testObject(@RequestBody Pager pager) { public ResultBean testObject(@RequestBody Pager pager) {
// LOGGER.info("【impp-core-object接受数据】{}" ,pager); LOGGER.info("【impp-core-object接受数据】{}" ,pager);
// return ResultBean.success("返回:" + pager).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); return ResultBean.success("返回:" + pager).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode());
// } }
//
// @PostMapping(value="/test-map") @PostMapping(value="/test-map")
// @ApiOperation(value="测试get",notes = "测试get") @ApiOperation(value="测试get",notes = "测试get")
// public ResultBean testFeignMap(@RequestBody Map<String,String> map) { public ResultBean testFeignMap(@RequestBody Map<String,String> map) {
// LOGGER.info("【impp-core-map接受数据】{}" ,map); LOGGER.info("【impp-core-map接受数据】{}" ,map);
// return ResultBean.success("返回:" + map).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); return ResultBean.success("返回:" + map).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode());
// } }
//
// @PostMapping(value="/test-arr") @PostMapping(value="/test-arr")
// @ApiOperation(value="测试arr",notes = "测试arr") @ApiOperation(value="测试arr",notes = "测试arr")
// public ResultBean testFeignArr(@RequestBody String[] arr) { public ResultBean testFeignArr(@RequestBody String[] arr) {
// LOGGER.info("【impp-core-arr接受数据】{}" ,arr); LOGGER.info("【impp-core-arr接受数据】{}" ,arr);
// return ResultBean.success("返回:" + arr).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); return ResultBean.success("返回:" + arr).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode());
// } }
//
// @PostMapping(value="/test-more-object") @PostMapping(value="/test-more-object")
// @ApiOperation(value="测试多对象模型",notes = "测试多对象模型") @ApiOperation(value="测试多对象模型",notes = "测试多对象模型")
// public ResultBean testFeignMoreObj(@RequestBody BaseModelBean<SysRole> roleBean) { public ResultBean testFeignMoreObj(@RequestBody BaseModelBean<SysRole> roleBean) {
// LOGGER.info("【impp-core-more-obj接受多对象模型】objBean:{},pager:{}" ,roleBean.getObj(),roleBean.getPager()); LOGGER.info("【impp-core-more-obj接受多对象模型】objBean:{},pager:{}" ,roleBean.getObj(),roleBean.getPager());
// return ResultBean.success("返回:" + roleBean).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); return ResultBean.success("返回:" + roleBean).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode());
// } }
//} }

@ -1,5 +1,6 @@
package cn.estsh.i3plus.core.apiservice.controller; package cn.estsh.i3plus.core.apiservice.controller;
import cn.estsh.impp.framework.boot.eureka.EurekaClientHealthCheck;
import cn.estsh.impp.framework.boot.util.ResultBean; import cn.estsh.impp.framework.boot.util.ResultBean;
import com.netflix.appinfo.ApplicationInfoManager; import com.netflix.appinfo.ApplicationInfoManager;
import com.netflix.appinfo.EurekaInstanceConfig; import com.netflix.appinfo.EurekaInstanceConfig;
@ -37,6 +38,9 @@ public class DemoEurekaController {
@Autowired @Autowired
private ApplicationInfoManager applicationInfoManager; private ApplicationInfoManager applicationInfoManager;
@Autowired
private EurekaClientHealthCheck healthCheck;
/** /**
* *
* @return * @return
@ -50,7 +54,7 @@ public class DemoEurekaController {
} }
/** /**
* *
* @return * @return
*/ */
@GetMapping(value="/show") @GetMapping(value="/show")
@ -71,4 +75,30 @@ public class DemoEurekaController {
return new ResultBean(true); 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);
}
} }

@ -52,9 +52,11 @@ eureka.instance.hostname=${impp.server.ip}
eureka.instance.status-page-url=http://${impp.server.ip}:${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 #将自己的IP注册到Eureka Server。若不配置或设置为false表示注册微服务所在操作系统的hostname到Eureka Server
eureka.instance.prefer-ip-address=true eureka.instance.prefer-ip-address=true
#是否进行健康检查
eureka.client.healthcheck.enabled=true
################ 检测机制 ################ ################ 检测机制 ################
#心跳间隔周期,宕机限制(秒),90秒没反应视为宕机 #心跳间隔周期,宕机限制(秒),30秒没反应视为宕机
eureka.instance.lease-expiration-duration-in-seconds=30 eureka.instance.lease-expiration-duration-in-seconds=30
#心跳周期 #心跳周期
eureka.instance.lease-renewal-interval-in-seconds=20 eureka.instance.lease-renewal-interval-in-seconds=20

@ -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 eureka.instance.status-page-url=http://${eureka.instance.ip-address}:${server.port}/swagger-ui.html
#将自己的IP注册到Eureka Server。若不配置或设置为false表示注册微服务所在操作系统的hostname到Eureka Server #将自己的IP注册到Eureka Server。若不配置或设置为false表示注册微服务所在操作系统的hostname到Eureka Server
eureka.instance.prefer-ip-address=true eureka.instance.prefer-ip-address=true
#是否进行健康检查
eureka.client.healthcheck.enabled=true
#### 检测机制 #### #### 检测机制 ####
#心跳间隔周期宕机限制90秒没反应视为宕机 #心跳间隔周期宕机限制90秒没反应视为宕机

Loading…
Cancel
Save