org.example.service.CircuitBreakerCommand Maven / Gradle / Ivy
/*
* Copyright (c) 2005-2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
*
* WSO2 Inc. licenses this file to you under the Apache License,
* Version 2.0 (the "License"); you may not use this file except
* in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*/
package org.example.service;
import com.netflix.hystrix.HystrixCommand;
import com.netflix.hystrix.HystrixCommandGroupKey;
import com.netflix.hystrix.HystrixCommandKey;
import com.netflix.hystrix.HystrixCommandMetrics;
import com.netflix.hystrix.HystrixCommandProperties;
public class CircuitBreakerCommand extends HystrixCommand {
private StockQuoteDatabase db;
private final String symbol;
CircuitBreakerCommand(StockQuoteDatabase db, String symbol) {
super(HystrixCommand.Setter.withGroupKey(HystrixCommandGroupKey.Factory.asKey("MyGroup"))
.andCommandPropertiesDefaults(
HystrixCommandProperties.Setter()
.withCircuitBreakerEnabled(true)
.withCircuitBreakerRequestVolumeThreshold(50)
.withExecutionTimeoutEnabled(true)
.withExecutionTimeoutInMilliseconds(10)
));
this.db = db;
this.symbol = symbol;
}
@Override
protected Stock run() {
printMetrics();
return db.getStock(symbol);
}
@Override
protected Stock getFallback() {
if (isCircuitBreakerOpen()) {
System.out.println("Circuit is open");
}
printMetrics();
return db.getCachedStock(symbol);
}
private void printMetrics() {
HystrixCommandMetrics metrics =
HystrixCommandMetrics.
getInstance(HystrixCommandKey.Factory.asKey(this.getClass().getSimpleName()));
StringBuilder m = new StringBuilder();
if (metrics != null) {
HystrixCommandMetrics.HealthCounts health = metrics.getHealthCounts();
m.append("Requests: ").append(health.getTotalRequests()).append(" ");
m.append("Errors: ").append(health.getErrorCount()).append(" (").
append(health.getErrorPercentage()).append("%) ");
m.append("Mean: ").append(metrics.getExecutionTimePercentile(50)).append(" ");
m.append("75th: ").append(metrics.getExecutionTimePercentile(75)).append(" ");
m.append("90th: ").append(metrics.getExecutionTimePercentile(90)).append(" ");
m.append("99th: ").append(metrics.getExecutionTimePercentile(99)).append(" ");
}
System.out.println(m);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy