diff --git a/spring-cloud-sleuth-samples/pom.xml b/spring-cloud-sleuth-samples/pom.xml index 7da692f44..b9a179e21 100644 --- a/spring-cloud-sleuth-samples/pom.xml +++ b/spring-cloud-sleuth-samples/pom.xml @@ -21,6 +21,7 @@ spring-cloud-sleuth-sample-test-core spring-cloud-sleuth-sample-messaging spring-cloud-sleuth-sample-websocket + spring-cloud-sleuth-sample-feign spring-cloud-sleuth-sample-ribbon spring-cloud-sleuth-sample-zipkin spring-cloud-sleuth-sample-stream diff --git a/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-feign/pom.xml b/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-feign/pom.xml new file mode 100644 index 000000000..2eb3e1916 --- /dev/null +++ b/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-feign/pom.xml @@ -0,0 +1,88 @@ + + + + + 4.0.0 + + spring-cloud-sleuth-sample-feign + jar + spring-cloud-sleuth-sample-feign + Spring Cloud Sleuth Sample + + + org.springframework.cloud + spring-cloud-sleuth-samples + 1.0.0.BUILD-SNAPSHOT + .. + + + + true + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + repackage + + + + + + + maven-deploy-plugin + + true + + + + + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.cloud + spring-cloud-starter-feign + + + + org.springframework.cloud + spring-cloud-starter-eureka + + + org.springframework.cloud + spring-cloud-sleuth-zipkin + + + org.springframework.boot + spring-boot-starter-aop + + + org.springframework.boot + spring-boot-starter-actuator + + + org.springframework.boot + spring-boot-starter-test + test + + + + diff --git a/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-feign/src/main/java/sample/SampleController.java b/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-feign/src/main/java/sample/SampleController.java new file mode 100644 index 000000000..9fdb3b956 --- /dev/null +++ b/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-feign/src/main/java/sample/SampleController.java @@ -0,0 +1,65 @@ +/* + * Copyright 2013-2015 the original author or authors. + * + * Licensed 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 sample; + +import java.util.Random; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cloud.netflix.feign.FeignClient; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +/** + * @author Spencer Gibb + * @author Dave Syer + */ +@RestController +public class SampleController { + + private Zipkin zipkin; + + private Random random = new Random(); + + @Autowired + public SampleController(Zipkin zipkin) { + this.zipkin = zipkin; + } + + @RequestMapping("/") + public String hi() throws InterruptedException { + Thread.sleep(this.random.nextInt(1000)); + String s = this.zipkin.hi2(); + return "hi/" + s; + } + + @RequestMapping("/call") + public String traced() { + String s = this.zipkin.call(); + return "call/" + s; + } + +} + +@FeignClient("zipkin") +interface Zipkin { + @RequestMapping(value = "/call", method = RequestMethod.GET) + String call(); + + @RequestMapping(value = "/hi2", method = RequestMethod.GET) + String hi2(); +} \ No newline at end of file diff --git a/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-feign/src/main/java/sample/SampleFeignApplication.java b/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-feign/src/main/java/sample/SampleFeignApplication.java new file mode 100644 index 000000000..d0429dcce --- /dev/null +++ b/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-feign/src/main/java/sample/SampleFeignApplication.java @@ -0,0 +1,55 @@ +/* + * Copyright 2013-2015 the original author or authors. + * + * Licensed 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 sample; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.cloud.netflix.feign.EnableFeignClients; +import org.springframework.cloud.sleuth.zipkin.ZipkinSpanReporter; +import org.springframework.context.annotation.Bean; + +import zipkin.Span; + +/** + * @author Spencer Gibb + */ +@SpringBootApplication +@EnableFeignClients +public class SampleFeignApplication { + + private static Log logger = LogFactory.getLog(SampleFeignApplication.class); + + public static void main(String[] args) { + SpringApplication.run(SampleFeignApplication.class, args); + } + + // Use this for debugging (or if there is no Zipkin server running on port 9411) + @Bean + @ConditionalOnProperty(value = "sample.zipkin.enabled", havingValue = "false") + public ZipkinSpanReporter spanCollector() { + return new ZipkinSpanReporter() { + @Override + public void report(Span span) { + logger.info(span); + } + }; + } + +} diff --git a/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-feign/src/main/resources/application.yml b/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-feign/src/main/resources/application.yml new file mode 100644 index 000000000..22384ba49 --- /dev/null +++ b/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-feign/src/main/resources/application.yml @@ -0,0 +1,12 @@ +server: + port: 3383 + +logging.level.com.netflix.discovery: 'OFF' + +sample: + zipkin: + enabled: false + +spring: + application: + name: testSleuthFeign \ No newline at end of file diff --git a/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-feign/src/test/java/sample/SampleFeignApplicationTests.java b/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-feign/src/test/java/sample/SampleFeignApplicationTests.java new file mode 100644 index 000000000..523356062 --- /dev/null +++ b/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-feign/src/test/java/sample/SampleFeignApplicationTests.java @@ -0,0 +1,20 @@ +package sample; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.boot.test.SpringApplicationConfiguration; +import org.springframework.test.context.TestPropertySource; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.web.WebAppConfiguration; + +@RunWith(SpringJUnit4ClassRunner.class) +@SpringApplicationConfiguration(classes = SampleFeignApplication.class) +@WebAppConfiguration +@TestPropertySource(properties="sample.zipkin.enabled=false") +public class SampleFeignApplicationTests { + + @Test + public void contextLoads() { + } + +}