use of com.tencent.polaris.circuitbreak.example.CircuitBreakExampleUtils.InitResult in project polaris-java by polarismesh.
the class CircuitBreakExample method main.
public static void main(String[] args) throws Throwable {
InitResult initResult = CircuitBreakExampleUtils.initConfiguration(args);
// 由于需要用到多个API对象,因此可以使用SDKContext使得多个API对象的资源都可以共享
try (SDKContext sdkContext = SDKContext.initContext()) {
ProviderAPI providerAPI = DiscoveryAPIFactory.createProviderAPIByContext(sdkContext);
// 1. 先注册服务实例
registerInstances(providerAPI, initResult);
// 2. 获取可用的服务实例列表
ConsumerAPI consumerAPI = DiscoveryAPIFactory.createConsumerAPIByContext(sdkContext);
Instance[] availableInstances = getAvailableInstances(consumerAPI, initResult);
System.out.println("available instances count is " + availableInstances.length);
// 3. 针对某个服务实例上报调用结果失败,默认连续10次失败,或者1分钟错误率50%,就会对实例进行熔断
Instance targetInstance = availableInstances[0];
System.out.printf("target instance is %s:%d%n", targetInstance.getHost(), targetInstance.getPort());
for (int i = 0; i < 120000; i++) {
// 这里要进行服务调用,用户可以写自己的服务调用代码
for (Instance instance : availableInstances) {
ServiceCallResult serviceCallResult = new ServiceCallResult();
serviceCallResult.setInstance(targetInstance);
serviceCallResult.setMethod("echo");
if (instance.getHost().equals(targetInstance.getHost()) && instance.getPort() == targetInstance.getPort()) {
serviceCallResult.setRetStatus(RetStatus.RetFail);
serviceCallResult.setDelay(2000);
} else {
serviceCallResult.setRetStatus(RetStatus.RetSuccess);
serviceCallResult.setDelay(20);
}
consumerAPI.updateServiceCallResult(serviceCallResult);
}
System.out.printf("report call result %d%n", i);
CircuitBreakExampleUtils.doSleep(500);
}
// 4. 判断服务实例是否还在可用列表中,已经熔断的实例是不会再次返回
availableInstances = getAvailableInstances(consumerAPI, initResult);
System.out.println("available instances count is " + availableInstances.length);
for (Instance instance : availableInstances) {
System.out.printf("available instance is %s:%d%n", instance.getHost(), instance.getPort());
}
// 4. 反注册服务实例
System.out.println("start to deregister instances");
deregisterInstances(providerAPI, initResult);
}
}
Aggregations