Closed freeFeatrue closed 8 years ago
你好,请确认服务注册后是否调用了心跳开关
MotanSwitcherUtil.setSwitcherValue(MotanConstants.REGISTRY_HEARTBEAT_SWITCHER, true);
如果已打开,consul的ui控制台会显示passing,否则是failing
`import javax.annotation.PostConstruct;
import org.springframework.stereotype.Service;
import com.weibo.api.motan.common.MotanConstants; import com.weibo.api.motan.util.MotanSwitcherUtil;
@Service public class InitApplication {
@PostConstruct
public void onApplicationEvent() {
//添加保持心跳
MotanSwitcherUtil.setSwitcherValue(MotanConstants.REGISTRY_HEARTBEAT_SWITCHER, true);
}
}` 有调用,这个是我spring容器初始化后执行的,启用心跳开关,这样应该可以吧
可以调用MotanSwitcherUtil.isOpen(MotanConstants.REGISTRY_HEARTBEAT_SWITCHER)
查看一下开关是否调用成功
`@Controller public class TestController {
@RequestMapping("test")
public ModelAndView test(){
System.out.println(MotanSwitcherUtil.isOpen(MotanConstants.REGISTRY_HEARTBEAT_SWITCHER));
return new ModelAndView("test");
}
}` 打印结果是true
保持心跳是用代码定时请求consul服务吗?能告诉是哪儿一段程序吗?我调试一下也可以!
在motan-manager的服务查询里也查不到服务信息吗
可以查看ConsulRegistry.java下doRegister和doAvailable里的相关代码,心跳管理在ConsulHeartbeatManager中
可以看到查到服务信息,只不过服务的状态是UnavailableServer!我先跟下代码
1.代码 ConsulHeartbeatManager.java 61行 switcherStatus = false, 检测心跳的程序就没有执行 2.代码 ConsulRegistry.java 162行,doAvailable(URL url) 根本没有执行(打断点,启动服务不走断点)
这说明设置的心跳开关没有起作用...
MotanSwitcherUtil.setSwitcherValue(MotanConstants.REGISTRY_HEARTBEAT_SWITCHER, true);
我觉得这个开关设置代码有问题,AbstractRegistry.java 62行, available(null); 传入的参数是null; 执行到ConsulRegistry.java 162行 doAvailable(URL url) 的时候根本就没有设置成功!
这段逻辑没问题,null是暂时的标识,表示对所有url都起作用 正常调用心跳开关是可以提供服务的
恩,好吧!我错了!
MotanSwitcherUtil.setSwitcherValue(MotanConstants.REGISTRY_HEARTBEAT_SWITCHER, true);
我这段代码执行的位置不对,虽然设置进去了true,不知道为啥没起作用!应该是在server启动之前设置了!
MotanSwitcherUtil.setSwitcherValue(MotanConstants.REGISTRY_HEARTBEAT_SWITCHER, true);
我改到手动出发就可以了,请问你们再用的时候这段代码是放到什么事件里面执行呢?
你可以看一下MotanConstants.REGISTRY_HEARTBEAT_SWITCHER
的调用位置
在AbstractRegistry里会注册SwitcherListener监听开关状态,当开关变化的时候触发SwitcherListener的onValueChanged操作
@freeFeatrue 这段代码只是演示了控制开关的方式,实际使用可以根据你的业务需求自己决定。 微博在实际使用中,由运维平台通过统一的开关管理机制进行控制。一般rpc服务上线后默认是503状态,在服务检测通过后,才会打开开关提供服务。
明白了,谢谢!
按照文档操作,我的consul启动命令 consul agent -dev ; 项目的配置文件配置连接到这个注册中心,服务可以正常注册,但是现实的服务状态一直是failing!