Search in sources :

Example 1 with InitResult

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);
    }
}
Also used : SDKContext(com.tencent.polaris.client.api.SDKContext) ProviderAPI(com.tencent.polaris.api.core.ProviderAPI) InitResult(com.tencent.polaris.circuitbreak.example.CircuitBreakExampleUtils.InitResult) ServiceCallResult(com.tencent.polaris.api.rpc.ServiceCallResult) Instance(com.tencent.polaris.api.pojo.Instance) ConsumerAPI(com.tencent.polaris.api.core.ConsumerAPI)

Aggregations

ConsumerAPI (com.tencent.polaris.api.core.ConsumerAPI)1 ProviderAPI (com.tencent.polaris.api.core.ProviderAPI)1 Instance (com.tencent.polaris.api.pojo.Instance)1 ServiceCallResult (com.tencent.polaris.api.rpc.ServiceCallResult)1 InitResult (com.tencent.polaris.circuitbreak.example.CircuitBreakExampleUtils.InitResult)1 SDKContext (com.tencent.polaris.client.api.SDKContext)1