added missing new files
This commit is contained in:
@@ -1,8 +1,10 @@
|
||||
package com.baeldung.hystrix;
|
||||
|
||||
import com.netflix.hystrix.contrib.metrics.eventstream.HystrixMetricsStreamServlet;
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
import org.springframework.boot.web.servlet.ServletRegistrationBean;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
|
||||
@SpringBootApplication
|
||||
public class AppConfig {
|
||||
@@ -10,4 +12,9 @@ public class AppConfig {
|
||||
public static void main(String[] args) {
|
||||
SpringApplication.run(AppConfig.class, args);
|
||||
}
|
||||
|
||||
@Bean
|
||||
public ServletRegistrationBean adminServletRegistrationBean() {
|
||||
return new ServletRegistrationBean(new HystrixMetricsStreamServlet(), "/hystrix.stream");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,81 @@
|
||||
package com.baeldung.hystrix;
|
||||
|
||||
/**
|
||||
* Created by sbalachandran on 8/5/2016.
|
||||
*/
|
||||
import com.netflix.hystrix.*;
|
||||
import org.aspectj.lang.ProceedingJoinPoint;
|
||||
import org.aspectj.lang.annotation.Around;
|
||||
import org.aspectj.lang.annotation.Aspect;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.annotation.PostConstruct;
|
||||
|
||||
@Component
|
||||
@Aspect
|
||||
public class HystrixAspect {
|
||||
|
||||
private HystrixCommand.Setter config;
|
||||
private HystrixCommandProperties.Setter commandProperties;
|
||||
private HystrixThreadPoolProperties.Setter threadPoolProperties;
|
||||
|
||||
@Around("@annotation(com.baeldung.hystrix.HystrixCircuitBreaker)")
|
||||
public Object circuitBreakerAround(final ProceedingJoinPoint aJoinPoint) {
|
||||
return new RemoteServiceCommand(config, aJoinPoint).execute();
|
||||
}
|
||||
|
||||
@PostConstruct
|
||||
private void setup() {
|
||||
this.config = HystrixCommand.Setter.withGroupKey(HystrixCommandGroupKey.Factory.asKey(groupKey));
|
||||
this.config = config.andCommandKey(HystrixCommandKey.Factory.asKey(key));
|
||||
|
||||
this.commandProperties = HystrixCommandProperties.Setter();
|
||||
this.commandProperties.withExecutionTimeoutInMilliseconds(executionTimeout);
|
||||
this.commandProperties.withCircuitBreakerSleepWindowInMilliseconds(sleepWindow);
|
||||
|
||||
this.threadPoolProperties= HystrixThreadPoolProperties.Setter();
|
||||
this.threadPoolProperties.withMaxQueueSize(maxThreadCount).withCoreSize(coreThreadCount).withMaxQueueSize(queueCount);
|
||||
|
||||
this.config.andCommandPropertiesDefaults(commandProperties);
|
||||
this.config.andThreadPoolPropertiesDefaults(threadPoolProperties);
|
||||
}
|
||||
|
||||
private static class RemoteServiceCommand extends HystrixCommand<String> {
|
||||
|
||||
private final ProceedingJoinPoint joinPoint;
|
||||
|
||||
RemoteServiceCommand(final Setter config, final ProceedingJoinPoint joinPoint) {
|
||||
super(config);
|
||||
this.joinPoint = joinPoint;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String run() throws Exception {
|
||||
try {
|
||||
return (String) joinPoint.proceed();
|
||||
} catch (final Throwable th) {
|
||||
throw new Exception(th);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@Value("${remoteservice.command.execution.timeout}")
|
||||
private int executionTimeout;
|
||||
|
||||
@Value("${remoteservice.command.sleepwindow}")
|
||||
private int sleepWindow;
|
||||
|
||||
@Value("${remoteservice.command.threadpool.maxsize}")
|
||||
private int maxThreadCount;
|
||||
|
||||
@Value("${remoteservice.command.threadpool.coresize}")
|
||||
private int coreThreadCount;
|
||||
|
||||
@Value("${remoteservice.command.task.queue.size}")
|
||||
private int queueCount;
|
||||
|
||||
@Value("${remoteservice.command.group.key}")
|
||||
private String groupKey;
|
||||
|
||||
@Value("${remoteservice.command.key}")
|
||||
private String key;
|
||||
}
|
||||
|
||||
@@ -1,7 +1,11 @@
|
||||
package com.baeldung.hystrix;
|
||||
|
||||
/**
|
||||
* Created by sbalachandran on 8/5/2016.
|
||||
*/
|
||||
public class HystrixCircuitBreaker {
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Target(ElementType.METHOD)
|
||||
public @interface HystrixCircuitBreaker {
|
||||
}
|
||||
|
||||
@@ -1,7 +1,17 @@
|
||||
package com.baeldung.hystrix;
|
||||
|
||||
/**
|
||||
* Created by sbalachandran on 8/5/2016.
|
||||
*/
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Component("springClient")
|
||||
public class SpringExistingClient {
|
||||
|
||||
@Value("${remoteservice.timeout}")
|
||||
private int remoteServiceDelay;
|
||||
|
||||
@HystrixCircuitBreaker
|
||||
public String invokeRemoteService() throws InterruptedException{
|
||||
return new RemoteServiceTestSimulator(remoteServiceDelay).execute();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
remoteservice.command.group.key=RemoteServiceGroup
|
||||
remoteservice.command.key=RemoteServiceKey
|
||||
remoteservice.command.execution.timeout=10000
|
||||
remoteservice.command.threadpool.coresize=5
|
||||
remoteservice.command.threadpool.maxsize=10
|
||||
remoteservice.command.task.queue.size=5
|
||||
remoteservice.command.sleepwindow=5000
|
||||
remoteservice.timeout=5000
|
||||
Reference in New Issue
Block a user