Minor changes after review

This commit is contained in:
Alex Theedom 2016-08-15 22:48:27 +01:00
parent 2f331cecf8
commit 6aadd2d8ff
5 changed files with 87 additions and 45 deletions

View File

@ -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>

View File

@ -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;
} }

View File

@ -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

View File

@ -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;

View File

@ -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"));
}
}