Minor changes after review
This commit is contained in:
parent
2f331cecf8
commit
6aadd2d8ff
|
@ -12,9 +12,9 @@
|
||||||
<groupId>org.springframework.boot</groupId>
|
<groupId>org.springframework.boot</groupId>
|
||||||
<artifactId>spring-boot-starter-parent</artifactId>
|
<artifactId>spring-boot-starter-parent</artifactId>
|
||||||
<version>1.4.0.RELEASE</version>
|
<version>1.4.0.RELEASE</version>
|
||||||
<relativePath></relativePath>
|
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
|
|
||||||
<!-- General -->
|
<!-- General -->
|
||||||
|
@ -33,60 +33,68 @@
|
||||||
<maven-war-plugin.version>2.6</maven-war-plugin.version>
|
<maven-war-plugin.version>2.6</maven-war-plugin.version>
|
||||||
<maven-surefire-plugin.version>2.19.1</maven-surefire-plugin.version>
|
<maven-surefire-plugin.version>2.19.1</maven-surefire-plugin.version>
|
||||||
<maven-resources-plugin.version>2.7</maven-resources-plugin.version>
|
<maven-resources-plugin.version>2.7</maven-resources-plugin.version>
|
||||||
|
<hystrix-metrics-event-stream.version>1.3.16</hystrix-metrics-event-stream.version>
|
||||||
|
<hystrix-dashboard.version>1.4.3</hystrix-dashboard.version>
|
||||||
|
<spring-boot-starter-test.version>1.4.0.RELEASE</spring-boot-starter-test.version>
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-tomcat</artifactId>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.springframework.boot</groupId>
|
<groupId>org.springframework.boot</groupId>
|
||||||
<artifactId>spring-boot-starter-web</artifactId>
|
<artifactId>spring-boot-starter-web</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.springframework.boot</groupId>
|
<groupId>org.springframework.boot</groupId>
|
||||||
<artifactId>spring-boot-starter-aop</artifactId>
|
<artifactId>spring-boot-starter-aop</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.netflix.hystrix</groupId>
|
<groupId>com.netflix.hystrix</groupId>
|
||||||
<artifactId>hystrix-core</artifactId>
|
<artifactId>hystrix-core</artifactId>
|
||||||
<version>${hystrix-core.version}</version>
|
<version>${hystrix-core.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.netflix.hystrix</groupId>
|
<groupId>com.netflix.hystrix</groupId>
|
||||||
<artifactId>hystrix-metrics-event-stream</artifactId>
|
<artifactId>hystrix-metrics-event-stream</artifactId>
|
||||||
<version>1.3.16</version>
|
<version>${hystrix-metrics-event-stream.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
<!-- https://mvnrepository.com/artifact/com.netflix.hystrix/hystrix-dashboard -->
|
|
||||||
<!--<dependency>
|
|
||||||
<groupId>com.netflix.hystrix</groupId>
|
<groupId>com.netflix.hystrix</groupId>
|
||||||
<artifactId>hystrix-dashboard</artifactId>
|
<artifactId>hystrix-dashboard</artifactId>
|
||||||
<version>1.4.3</version>
|
<version>${hystrix-dashboard.version}</version>
|
||||||
</dependency>-->
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.netflix.rxjava</groupId>
|
<groupId>com.netflix.rxjava</groupId>
|
||||||
<artifactId>rxjava-core</artifactId>
|
<artifactId>rxjava-core</artifactId>
|
||||||
<version>${rxjava-core.version}</version>
|
<version>${rxjava-core.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.hamcrest</groupId>
|
<groupId>org.hamcrest</groupId>
|
||||||
<artifactId>hamcrest-all</artifactId>
|
<artifactId>hamcrest-all</artifactId>
|
||||||
<version>${hamcrest-all.version}</version>
|
<version>${hamcrest-all.version}</version>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>junit</groupId>
|
<groupId>junit</groupId>
|
||||||
<artifactId>junit</artifactId>
|
<artifactId>junit</artifactId>
|
||||||
<version>${junit.version}</version>
|
<version>${junit.version}</version>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework</groupId>
|
||||||
|
<artifactId>spring-test</artifactId>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-test</artifactId>
|
||||||
|
<version>${spring-boot-starter-test.version}</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
<build>
|
<build>
|
||||||
|
|
|
@ -17,6 +17,28 @@ public class HystrixAspect {
|
||||||
private HystrixCommandProperties.Setter commandProperties;
|
private HystrixCommandProperties.Setter commandProperties;
|
||||||
private HystrixThreadPoolProperties.Setter threadPoolProperties;
|
private HystrixThreadPoolProperties.Setter threadPoolProperties;
|
||||||
|
|
||||||
|
@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;
|
||||||
|
|
||||||
|
|
||||||
@Around("@annotation(com.baeldung.hystrix.HystrixCircuitBreaker)")
|
@Around("@annotation(com.baeldung.hystrix.HystrixCircuitBreaker)")
|
||||||
public Object circuitBreakerAround(final ProceedingJoinPoint aJoinPoint) {
|
public Object circuitBreakerAround(final ProceedingJoinPoint aJoinPoint) {
|
||||||
return new RemoteServiceCommand(config, aJoinPoint).execute();
|
return new RemoteServiceCommand(config, aJoinPoint).execute();
|
||||||
|
@ -31,7 +53,7 @@ public class HystrixAspect {
|
||||||
this.commandProperties.withExecutionTimeoutInMilliseconds(executionTimeout);
|
this.commandProperties.withExecutionTimeoutInMilliseconds(executionTimeout);
|
||||||
this.commandProperties.withCircuitBreakerSleepWindowInMilliseconds(sleepWindow);
|
this.commandProperties.withCircuitBreakerSleepWindowInMilliseconds(sleepWindow);
|
||||||
|
|
||||||
this.threadPoolProperties= HystrixThreadPoolProperties.Setter();
|
this.threadPoolProperties = HystrixThreadPoolProperties.Setter();
|
||||||
this.threadPoolProperties.withMaxQueueSize(maxThreadCount).withCoreSize(coreThreadCount).withMaxQueueSize(queueCount);
|
this.threadPoolProperties.withMaxQueueSize(maxThreadCount).withCoreSize(coreThreadCount).withMaxQueueSize(queueCount);
|
||||||
|
|
||||||
this.config.andCommandPropertiesDefaults(commandProperties);
|
this.config.andCommandPropertiesDefaults(commandProperties);
|
||||||
|
@ -58,24 +80,4 @@ public class HystrixAspect {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@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;
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,4 +5,4 @@ remoteservice.command.threadpool.coresize=5
|
||||||
remoteservice.command.threadpool.maxsize=10
|
remoteservice.command.threadpool.maxsize=10
|
||||||
remoteservice.command.task.queue.size=5
|
remoteservice.command.task.queue.size=5
|
||||||
remoteservice.command.sleepwindow=5000
|
remoteservice.command.sleepwindow=5000
|
||||||
remoteservice.timeout=5000
|
remoteservice.timeout=15000
|
|
@ -16,7 +16,7 @@ import static org.hamcrest.Matchers.equalTo;
|
||||||
public class HystrixTimeoutTest {
|
public class HystrixTimeoutTest {
|
||||||
|
|
||||||
private HystrixCommand.Setter config;
|
private HystrixCommand.Setter config;
|
||||||
private HystrixCommandProperties.Setter commandProperties ;
|
private HystrixCommandProperties.Setter commandProperties;
|
||||||
|
|
||||||
|
|
||||||
@Rule
|
@Rule
|
||||||
|
@ -31,7 +31,7 @@ public class HystrixTimeoutTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void givenInputBob_andDefaultSettings_thenReturnHelloBob(){
|
public void givenInputBob_andDefaultSettings_thenReturnHelloBob() {
|
||||||
assertThat(new CommandHelloWorld("Bob").execute(), equalTo("Hello Bob!"));
|
assertThat(new CommandHelloWorld("Bob").execute(), equalTo("Hello Bob!"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -107,12 +107,12 @@ public class HystrixTimeoutTest {
|
||||||
equalTo("Success"));
|
equalTo("Success"));
|
||||||
}
|
}
|
||||||
|
|
||||||
public String invokeRemoteService(long timeout) throws InterruptedException{
|
public String invokeRemoteService(long timeout) throws InterruptedException {
|
||||||
String response = null;
|
String response = null;
|
||||||
try{
|
try {
|
||||||
response = new RemoteServiceTestCommand(config,
|
response = new RemoteServiceTestCommand(config,
|
||||||
new RemoteServiceTestSimulator(timeout)).execute();
|
new RemoteServiceTestSimulator(timeout)).execute();
|
||||||
}catch(HystrixRuntimeException ex){
|
} catch (HystrixRuntimeException ex) {
|
||||||
System.out.println("ex = " + ex);
|
System.out.println("ex = " + ex);
|
||||||
}
|
}
|
||||||
return response;
|
return response;
|
||||||
|
|
|
@ -0,0 +1,32 @@
|
||||||
|
package com.baeldung.hystrix;
|
||||||
|
|
||||||
|
import com.netflix.hystrix.exception.HystrixRuntimeException;
|
||||||
|
import org.junit.Rule;
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.junit.rules.ExpectedException;
|
||||||
|
import org.junit.runner.RunWith;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.boot.test.context.SpringBootTest;
|
||||||
|
import org.springframework.test.context.junit4.SpringRunner;
|
||||||
|
|
||||||
|
import static org.hamcrest.MatcherAssert.assertThat;
|
||||||
|
import static org.hamcrest.Matchers.equalTo;
|
||||||
|
|
||||||
|
@RunWith(SpringRunner.class)
|
||||||
|
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT, classes = AppConfig.class)
|
||||||
|
public class SpringAndHystrixIntegrationTest {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private HystrixController hystrixController;
|
||||||
|
|
||||||
|
@Rule
|
||||||
|
public final ExpectedException exception = ExpectedException.none();
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenTimeOutOf15000_whenExistingClientCalled_thenExpectHystrixRuntimeException() throws InterruptedException {
|
||||||
|
exception.expect(HystrixRuntimeException.class);
|
||||||
|
assertThat(hystrixController.index(), equalTo("Success"));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue