├── .gitignore ├── 1-Brixton版教程示例 ├── Chapter1-1-1 │ ├── compute-service │ │ ├── pom.xml │ │ └── src │ │ │ ├── main │ │ │ ├── java │ │ │ │ └── com │ │ │ │ │ └── didispace │ │ │ │ │ ├── ComputeServiceApplication.java │ │ │ │ │ └── web │ │ │ │ │ └── ComputeController.java │ │ │ └── resources │ │ │ │ └── application.properties │ │ │ └── test │ │ │ └── java │ │ │ └── com │ │ │ └── didispace │ │ │ └── ApplicationTests.java │ └── eureka-server │ │ ├── pom.xml │ │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── didispace │ │ │ └── Application.java │ │ └── resources │ │ └── application.properties ├── Chapter1-1-2 │ ├── eureka-feign │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ ├── java │ │ │ └── com │ │ │ │ └── didispace │ │ │ │ ├── FeignApplication.java │ │ │ │ ├── service │ │ │ │ └── ComputeClient.java │ │ │ │ └── web │ │ │ │ └── ConsumerController.java │ │ │ └── resources │ │ │ └── application.properties │ └── eureka-ribbon │ │ ├── pom.xml │ │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── didispace │ │ │ ├── RibbonApplication.java │ │ │ └── web │ │ │ └── ConsumerController.java │ │ └── resources │ │ └── application.properties ├── Chapter1-1-3 │ ├── compute-service │ │ ├── pom.xml │ │ └── src │ │ │ ├── main │ │ │ ├── java │ │ │ │ └── com │ │ │ │ │ └── didispace │ │ │ │ │ ├── ComputeServiceApplication.java │ │ │ │ │ └── web │ │ │ │ │ └── ComputeController.java │ │ │ └── resources │ │ │ │ └── application.properties │ │ │ └── test │ │ │ └── java │ │ │ └── com │ │ │ └── didispace │ │ │ └── ApplicationTests.java │ ├── eureka-feign │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ └── java │ │ │ └── com │ │ │ └── didispace │ │ │ ├── FeignApplication.java │ │ │ ├── service │ │ │ ├── ComputeClient.java │ │ │ └── ComputeClientHystrix.java │ │ │ └── web │ │ │ └── ConsumerController.java │ ├── eureka-ribbon │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ └── java │ │ │ └── com │ │ │ └── didispace │ │ │ ├── RibbonApplication.java │ │ │ ├── service │ │ │ └── ComputeService.java │ │ │ └── web │ │ │ └── ConsumerController.java │ └── eureka-server │ │ ├── pom.xml │ │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── didispace │ │ │ └── Application.java │ │ └── resources │ │ └── application.properties ├── Chapter1-1-4 │ ├── config-client │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ ├── java │ │ │ └── com │ │ │ │ └── didispace │ │ │ │ ├── Application.java │ │ │ │ └── web │ │ │ │ └── TestController.java │ │ │ └── resources │ │ │ └── bootstrap.properties │ ├── config-repo │ │ ├── didispace-dev.properties │ │ ├── didispace-prod.properties │ │ ├── didispace-test.properties │ │ └── didispace.properties │ └── config-server │ │ ├── pom.xml │ │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── didispace │ │ │ └── Application.java │ │ └── resources │ │ ├── application.properties │ │ ├── didispace-dev.properties │ │ ├── didispace-prod.properties │ │ ├── didispace-test.properties │ │ └── didispace.properties ├── Chapter1-1-5 │ ├── api-gateway │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ ├── java │ │ │ └── com │ │ │ │ └── didispace │ │ │ │ ├── Application.java │ │ │ │ └── filter │ │ │ │ └── AccessFilter.java │ │ │ └── resources │ │ │ └── application.properties │ ├── eureka-server │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ ├── java │ │ │ └── com │ │ │ │ └── didispace │ │ │ │ └── Application.java │ │ │ └── resources │ │ │ └── application.properties │ ├── service-A │ │ ├── pom.xml │ │ └── src │ │ │ ├── main │ │ │ ├── java │ │ │ │ └── com │ │ │ │ │ └── didispace │ │ │ │ │ ├── ComputeServiceApplication.java │ │ │ │ │ └── web │ │ │ │ │ └── ComputeController.java │ │ │ └── resources │ │ │ │ └── application.properties │ │ │ └── test │ │ │ └── java │ │ │ └── com │ │ │ └── didispace │ │ │ └── ApplicationTests.java │ └── service-B │ │ ├── pom.xml │ │ └── src │ │ ├── main │ │ ├── java │ │ │ └── com │ │ │ │ └── didispace │ │ │ │ ├── ComputeServiceApplication.java │ │ │ │ └── web │ │ │ │ └── ComputeController.java │ │ └── resources │ │ │ └── application.properties │ │ └── test │ │ └── java │ │ └── com │ │ └── didispace │ │ └── ApplicationTests.java ├── Chapter1-1-6 │ ├── compute-service │ │ ├── pom.xml │ │ └── src │ │ │ ├── main │ │ │ ├── java │ │ │ │ └── com │ │ │ │ │ └── didispace │ │ │ │ │ ├── ComputeServiceApplication.java │ │ │ │ │ └── web │ │ │ │ │ └── ComputeController.java │ │ │ └── resources │ │ │ │ └── application.properties │ │ │ └── test │ │ │ └── java │ │ │ └── com │ │ │ └── didispace │ │ │ └── ApplicationTests.java │ └── eureka-server │ │ ├── pom.xml │ │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── didispace │ │ │ └── Application.java │ │ └── resources │ │ ├── application-peer1.properties │ │ └── application-peer2.properties ├── Chapter1-1-7 │ ├── config-client-eureka-kafka │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ ├── java │ │ │ └── com │ │ │ │ └── didispace │ │ │ │ ├── Application.java │ │ │ │ └── web │ │ │ │ └── TestController.java │ │ │ └── resources │ │ │ └── bootstrap.properties │ ├── config-client-eureka │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ ├── java │ │ │ └── com │ │ │ │ └── didispace │ │ │ │ ├── Application.java │ │ │ │ └── web │ │ │ │ └── TestController.java │ │ │ └── resources │ │ │ └── bootstrap.properties │ ├── config-repo │ │ ├── didispace-dev.properties │ │ ├── didispace-prod.properties │ │ ├── didispace-test.properties │ │ └── didispace.properties │ ├── config-server-eureka-kafka │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ ├── java │ │ │ └── com │ │ │ │ └── didispace │ │ │ │ └── Application.java │ │ │ └── resources │ │ │ ├── application.properties │ │ │ ├── didispace-dev.properties │ │ │ ├── didispace-prod.properties │ │ │ ├── didispace-test.properties │ │ │ └── didispace.properties │ └── config-server-eureka │ │ ├── pom.xml │ │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── didispace │ │ │ └── Application.java │ │ └── resources │ │ ├── application.properties │ │ ├── didispace-dev.properties │ │ ├── didispace-prod.properties │ │ ├── didispace-test.properties │ │ └── didispace.properties └── Chapter1-1-8 │ ├── config-client-eureka │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── didispace │ │ │ ├── Application.java │ │ │ └── web │ │ │ └── TestController.java │ │ └── resources │ │ └── bootstrap.properties │ ├── config-repo │ ├── didispace-dev.properties │ ├── didispace-prod.properties │ ├── didispace-test.properties │ └── didispace.properties │ └── config-server-eureka │ ├── pom.xml │ └── src │ └── main │ ├── java │ └── com │ │ └── didispace │ │ └── Application.java │ └── resources │ ├── application.properties │ ├── didispace-dev.properties │ ├── didispace-prod.properties │ ├── didispace-test.properties │ └── didispace.properties ├── 2-Dalston版教程示例 ├── api-gateway-with-eureka │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── didispace │ │ │ ├── AccessFilter.java │ │ │ └── Application.java │ │ └── resources │ │ └── application.yaml ├── api-gateway │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── didispace │ │ │ └── Application.java │ │ └── resources │ │ └── application.yaml ├── config-client │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── didispace │ │ │ └── Application.java │ │ └── resources │ │ └── bootstrap.yml ├── config-server-git │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── didispace │ │ │ └── Application.java │ │ └── resources │ │ └── application.yml ├── consul-client │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── didispace │ │ │ ├── Application.java │ │ │ └── DcController.java │ │ └── resources │ │ └── application.properties ├── consul-consumer │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── didispace │ │ │ ├── Application.java │ │ │ └── DcController.java │ │ └── resources │ │ └── application.properties ├── eureka-client │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── didispace │ │ │ ├── Application.java │ │ │ └── DcController.java │ │ └── resources │ │ └── application.properties ├── eureka-consumer-feign-hystrix │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── didispace │ │ │ ├── Application.java │ │ │ ├── DcClient.java │ │ │ ├── DcClientFallback.java │ │ │ └── DcController.java │ │ └── resources │ │ └── application.properties ├── eureka-consumer-feign │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── didispace │ │ │ ├── Application.java │ │ │ ├── DcClient.java │ │ │ └── DcController.java │ │ └── resources │ │ └── application.properties ├── eureka-consumer-ribbon-hystrix │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── didispace │ │ │ ├── Application.java │ │ │ └── DcController.java │ │ └── resources │ │ └── application.properties ├── eureka-consumer-ribbon │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── didispace │ │ │ ├── Application.java │ │ │ └── DcController.java │ │ └── resources │ │ └── application.properties ├── eureka-consumer │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── didispace │ │ │ ├── Application.java │ │ │ └── DcController.java │ │ └── resources │ │ └── application.properties ├── eureka-feign-api │ ├── pom.xml │ └── src │ │ └── main │ │ └── java │ │ └── com │ │ └── didispace │ │ └── api │ │ └── HelloService.java ├── eureka-feign-client │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── didispace │ │ │ └── api │ │ │ └── impl │ │ │ └── Application.java │ │ └── resources │ │ └── application.properties ├── eureka-feign-consumer │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── didispace │ │ │ └── api │ │ │ └── consumer │ │ │ └── Application.java │ │ └── resources │ │ └── application.properties ├── eureka-server │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── didispace │ │ │ └── Application.java │ │ └── resources │ │ ├── application-peer1.properties │ │ ├── application-peer2.properties │ │ └── application.properties ├── hystrix-collapser-consumer │ ├── pom.xml │ └── src │ │ ├── main │ │ ├── java │ │ │ └── com │ │ │ │ └── didispace │ │ │ │ ├── Application.java │ │ │ │ └── UserService.java │ │ └── resources │ │ │ └── application.properties │ │ └── test │ │ └── java │ │ └── CollapserTest.java ├── hystrix-collapser-provider │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── didispace │ │ │ ├── Application.java │ │ │ └── UserController.java │ │ └── resources │ │ └── application.properties ├── hystrix-dashboard │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── didispace │ │ │ └── HystrixDashboardApplication.java │ │ └── resources │ │ └── application.properties ├── pom.xml ├── turbine-amqp │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── didispace │ │ │ └── TurbineApplication.java │ │ └── resources │ │ └── application.properties └── turbine │ ├── pom.xml │ └── src │ └── main │ ├── java │ └── com │ │ └── didispace │ │ └── TurbineApplication.java │ └── resources │ └── application.properties ├── Chapter1-1-1 ├── compute-service │ ├── pom.xml │ └── src │ │ ├── main │ │ ├── java │ │ │ └── com │ │ │ │ └── didispace │ │ │ │ ├── ComputeServiceApplication.java │ │ │ │ └── web │ │ │ │ └── ComputeController.java │ │ └── resources │ │ │ └── application.properties │ │ └── test │ │ └── java │ │ └── com │ │ └── didispace │ │ └── ApplicationTests.java └── eureka-server │ ├── pom.xml │ └── src │ └── main │ ├── java │ └── com │ │ └── didispace │ │ └── Application.java │ └── resources │ └── application.properties ├── Chapter1-1-2 ├── eureka-feign │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── didispace │ │ │ ├── FeignApplication.java │ │ │ ├── service │ │ │ └── ComputeClient.java │ │ │ └── web │ │ │ └── ConsumerController.java │ │ └── resources │ │ └── application.properties └── eureka-ribbon │ ├── pom.xml │ └── src │ └── main │ ├── java │ └── com │ │ └── didispace │ │ ├── RibbonApplication.java │ │ └── web │ │ └── ConsumerController.java │ └── resources │ └── application.properties ├── Chapter1-1-3 ├── compute-service │ ├── pom.xml │ └── src │ │ ├── main │ │ ├── java │ │ │ └── com │ │ │ │ └── didispace │ │ │ │ ├── ComputeServiceApplication.java │ │ │ │ └── web │ │ │ │ └── ComputeController.java │ │ └── resources │ │ │ └── application.properties │ │ └── test │ │ └── java │ │ └── com │ │ └── didispace │ │ └── ApplicationTests.java ├── eureka-feign │ ├── pom.xml │ └── src │ │ └── main │ │ └── java │ │ └── com │ │ └── didispace │ │ ├── FeignApplication.java │ │ ├── service │ │ ├── ComputeClient.java │ │ └── ComputeClientHystrix.java │ │ └── web │ │ └── ConsumerController.java ├── eureka-ribbon │ ├── pom.xml │ └── src │ │ └── main │ │ └── java │ │ └── com │ │ └── didispace │ │ ├── RibbonApplication.java │ │ ├── service │ │ └── ComputeService.java │ │ └── web │ │ └── ConsumerController.java └── eureka-server │ ├── pom.xml │ └── src │ └── main │ ├── java │ └── com │ │ └── didispace │ │ └── Application.java │ └── resources │ └── application.properties ├── Chapter1-1-4 ├── config-client │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── didispace │ │ │ ├── Application.java │ │ │ └── web │ │ │ └── TestController.java │ │ └── resources │ │ └── bootstrap.properties ├── config-repo │ ├── didispace-dev.properties │ ├── didispace-prod.properties │ ├── didispace-test.properties │ └── didispace.properties └── config-server │ ├── pom.xml │ └── src │ └── main │ ├── java │ └── com │ │ └── didispace │ │ └── Application.java │ └── resources │ ├── application.properties │ ├── didispace-dev.properties │ ├── didispace-prod.properties │ ├── didispace-test.properties │ └── didispace.properties ├── Chapter1-1-5 ├── api-gateway │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── didispace │ │ │ ├── Application.java │ │ │ └── filter │ │ │ └── AccessFilter.java │ │ └── resources │ │ └── application.properties ├── eureka-server │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── didispace │ │ │ └── Application.java │ │ └── resources │ │ └── application.properties ├── service-A │ ├── pom.xml │ └── src │ │ ├── main │ │ ├── java │ │ │ └── com │ │ │ │ └── didispace │ │ │ │ ├── ComputeServiceApplication.java │ │ │ │ └── web │ │ │ │ └── ComputeController.java │ │ └── resources │ │ │ └── application.properties │ │ └── test │ │ └── java │ │ └── com │ │ └── didispace │ │ └── ApplicationTests.java └── service-B │ ├── pom.xml │ └── src │ ├── main │ ├── java │ │ └── com │ │ │ └── didispace │ │ │ ├── ComputeServiceApplication.java │ │ │ └── web │ │ │ └── ComputeController.java │ └── resources │ │ └── application.properties │ └── test │ └── java │ └── com │ └── didispace │ └── ApplicationTests.java ├── Chapter1-1-6 ├── compute-service │ ├── pom.xml │ └── src │ │ ├── main │ │ ├── java │ │ │ └── com │ │ │ │ └── didispace │ │ │ │ ├── ComputeServiceApplication.java │ │ │ │ └── web │ │ │ │ └── ComputeController.java │ │ └── resources │ │ │ └── application.properties │ │ └── test │ │ └── java │ │ └── com │ │ └── didispace │ │ └── ApplicationTests.java └── eureka-server │ ├── pom.xml │ └── src │ └── main │ ├── java │ └── com │ │ └── didispace │ │ └── Application.java │ └── resources │ ├── application-peer1.properties │ └── application-peer2.properties ├── Chapter1-1-7 ├── config-client-eureka-kafka │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── didispace │ │ │ ├── Application.java │ │ │ └── web │ │ │ └── TestController.java │ │ └── resources │ │ └── bootstrap.properties ├── config-client-eureka │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── didispace │ │ │ ├── Application.java │ │ │ └── web │ │ │ └── TestController.java │ │ └── resources │ │ └── bootstrap.properties ├── config-repo │ ├── didispace-dev.properties │ ├── didispace-prod.properties │ ├── didispace-test.properties │ └── didispace.properties ├── config-server-eureka-kafka │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── didispace │ │ │ └── Application.java │ │ └── resources │ │ ├── application.properties │ │ ├── didispace-dev.properties │ │ ├── didispace-prod.properties │ │ ├── didispace-test.properties │ │ └── didispace.properties └── config-server-eureka │ ├── pom.xml │ └── src │ └── main │ ├── java │ └── com │ │ └── didispace │ │ └── Application.java │ └── resources │ ├── application.properties │ ├── didispace-dev.properties │ ├── didispace-prod.properties │ ├── didispace-test.properties │ └── didispace.properties ├── Chapter1-1-8 ├── config-client-eureka │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── didispace │ │ │ ├── Application.java │ │ │ └── web │ │ │ └── TestController.java │ │ └── resources │ │ └── bootstrap.properties ├── config-repo │ ├── didispace-dev.properties │ ├── didispace-prod.properties │ ├── didispace-test.properties │ └── didispace.properties └── config-server-eureka │ ├── pom.xml │ └── src │ └── main │ ├── java │ └── com │ │ └── didispace │ │ └── Application.java │ └── resources │ ├── application.properties │ ├── didispace-dev.properties │ ├── didispace-prod.properties │ ├── didispace-test.properties │ └── didispace.properties ├── README.md └── spring_cloud_in_action ├── README.md ├── api-gateway-consul ├── filter │ ├── post │ │ └── PostFilter.groovy │ └── pre │ │ └── PreFilter.groovy ├── pom.xml └── src │ └── main │ ├── java │ └── com │ │ └── didispace │ │ ├── Application.java │ │ └── filter │ │ └── AccessFilter.java │ └── resources │ └── application.properties ├── api-gateway-dynamic-filter ├── filter │ ├── post │ │ └── PostFilter.groovy │ └── pre │ │ └── PreFilter.groovy ├── pom.xml └── src │ └── main │ ├── java │ └── com │ │ └── didispace │ │ ├── Application.java │ │ └── FilterConfiguration.java │ └── resources │ └── application.properties ├── api-gateway-dynamic-route ├── pom.xml └── src │ └── main │ ├── java │ └── com │ │ └── didispace │ │ └── Application.java │ └── resources │ └── bootstrap.properties ├── api-gateway-exception ├── pom.xml └── src │ └── main │ ├── java │ └── com │ │ └── didispace │ │ ├── Application.java │ │ └── filter │ │ ├── DidiErrorAttributes.java │ │ ├── DidiFilterProcessor.java │ │ ├── error │ │ ├── ErrorExtFilter.java │ │ └── ErrorFilter.java │ │ ├── post │ │ └── ThrowExceptionPostFilter.java │ │ └── pre │ │ └── ThrowExceptionFilter.java │ └── resources │ └── application.properties ├── api-gateway ├── pom.xml └── src │ └── main │ ├── java │ └── com │ │ └── didispace │ │ ├── Application.java │ │ ├── HelloController.java │ │ └── filter │ │ ├── AccessFilter.java │ │ ├── ErrorFilter.java │ │ └── ThrowExceptionFilter.java │ └── resources │ └── application.properties ├── config-client-eureka-kafka ├── pom.xml └── src │ └── main │ ├── java │ └── com │ │ └── didispace │ │ ├── Application.java │ │ └── web │ │ └── TestController.java │ └── resources │ └── bootstrap.properties ├── config-client-eureka-rabbit ├── pom.xml └── src │ └── main │ ├── java │ └── com │ │ └── didispace │ │ ├── Application.java │ │ └── web │ │ └── TestController.java │ └── resources │ └── bootstrap.properties ├── config-client-eureka ├── pom.xml └── src │ └── main │ ├── java │ └── com │ │ └── didispace │ │ ├── Application.java │ │ └── web │ │ └── TestController.java │ └── resources │ └── bootstrap.properties ├── config-client ├── pom.xml └── src │ └── main │ ├── java │ └── com │ │ └── didispace │ │ ├── Application.java │ │ └── web │ │ └── TestController.java │ └── resources │ └── bootstrap.properties ├── config-repo ├── api-gateway.properties ├── didispace-dev.properties ├── didispace-prod.properties ├── didispace-test.properties └── didispace.properties ├── config-server-eureka-kafka ├── pom.xml └── src │ └── main │ ├── java │ └── com │ │ └── didispace │ │ └── Application.java │ └── resources │ ├── application.properties │ ├── didispace-dev.properties │ ├── didispace-prod.properties │ ├── didispace-test.properties │ └── didispace.properties ├── config-server-eureka-rabbit ├── pom.xml └── src │ └── main │ ├── java │ └── com │ │ └── didispace │ │ └── Application.java │ └── resources │ ├── application.properties │ ├── didispace-dev.properties │ ├── didispace-prod.properties │ ├── didispace-test.properties │ └── didispace.properties ├── config-server-eureka ├── pom.xml └── src │ └── main │ ├── java │ └── com │ │ └── didispace │ │ └── Application.java │ └── resources │ ├── application.properties │ ├── didispace-dev.properties │ ├── didispace-prod.properties │ ├── didispace-test.properties │ └── didispace.properties ├── config-server ├── pom.xml └── src │ └── main │ ├── java │ └── com │ │ └── didispace │ │ └── Application.java │ └── resources │ ├── application.properties │ ├── config-server.keystore │ ├── didispace-dev.properties │ ├── didispace-prod.properties │ ├── didispace-test.properties │ └── didispace.properties ├── consul-client-1 ├── pom.xml └── src │ └── main │ ├── java │ └── com │ │ └── didispace │ │ └── ConsulApplication.java │ └── resources │ └── application.properties ├── diagram-uml ├── BusEndPoint.uml ├── BusEvent.uml ├── BusEventAndListener.uml ├── BusListener.uml └── EurekaDiscoveryClient.uml ├── eureka-server-ha ├── pom.xml └── src │ └── main │ ├── java │ └── com │ │ └── didispace │ │ └── Application.java │ └── resources │ ├── application-peer1.properties │ ├── application-peer2.properties │ └── application.properties ├── eureka-server ├── pom.xml └── src │ └── main │ ├── java │ └── com │ │ └── didispace │ │ └── Application.java │ └── resources │ ├── application-peer1.properties │ ├── application-peer2.properties │ └── application.properties ├── feign-consumer ├── pom.xml └── src │ └── main │ ├── java │ └── com │ │ └── didispace │ │ ├── ConsumerApplication.java │ │ └── web │ │ ├── ConsumerController.java │ │ ├── HelloService.java │ │ ├── HelloServiceFallback.java │ │ ├── RefactorHelloService.java │ │ └── User.java │ └── resources │ └── application.properties ├── hello-service-api ├── pom.xml └── src │ └── main │ └── java │ └── com │ └── didispace │ ├── dto │ └── User.java │ └── service │ └── HelloService.java ├── hello-service ├── pom.xml └── src │ └── main │ ├── java │ └── com │ │ └── didispace │ │ ├── HelloApplication.java │ │ ├── indicator │ │ └── RocketMQHealthIndicator.java │ │ └── web │ │ ├── HelloController.java │ │ ├── RefactorHelloController.java │ │ └── User.java │ └── resources │ └── application.properties ├── hystrix-dashboard ├── pom.xml └── src │ └── main │ ├── java │ └── com │ │ └── didispace │ │ └── HystrixDashboardApplication.java │ └── resources │ └── application.properties ├── pom.xml ├── rabbitmq-hello ├── pom.xml └── src │ ├── main │ ├── java │ │ └── com │ │ │ └── didispace │ │ │ ├── HelloApplication.java │ │ │ └── rabbit │ │ │ ├── RabbitConfig.java │ │ │ ├── Receiver.java │ │ │ └── Sender.java │ └── resources │ │ └── application.properties │ └── test │ └── java │ └── com │ └── didispace │ └── HelloApplicationTests.java ├── ribbon-consumer ├── pom.xml └── src │ └── main │ ├── java │ └── com │ │ └── didispace │ │ ├── ConsumerApplication.java │ │ └── web │ │ ├── ConsumerController.java │ │ ├── HelloService.java │ │ └── User.java │ └── resources │ └── application.properties ├── spring-boot-hello ├── pom.xml └── src │ ├── main │ ├── java │ │ └── com │ │ │ └── didispace │ │ │ ├── HelloApplication.java │ │ │ └── web │ │ │ └── HelloController.java │ └── resources │ │ ├── application-dev.properties │ │ ├── application-prod.properties │ │ ├── application-test.properties │ │ └── application.properties │ └── test │ └── java │ └── com │ └── didispace │ └── HelloApplicationTests.java ├── stream-consumer ├── pom.xml └── src │ ├── main │ ├── java │ │ └── com │ │ │ └── didispace │ │ │ ├── App1.java │ │ │ ├── HelloApplication.java │ │ │ ├── SinkReceiver1.java │ │ │ ├── SinkReceiver2.java │ │ │ ├── SinkReceiver3.java │ │ │ ├── SinkReceiver4.java │ │ │ └── User.java │ └── resources │ │ └── application.properties │ └── test │ └── java │ └── com │ └── didispace │ ├── HelloApplicationTests.java │ ├── HelloApplicationTests2.java │ └── HelloApplicationTests3.java ├── stream-hello └── src │ └── main │ └── java │ └── com │ └── didispace │ └── aggregate │ └── Sink │ └── SinkApplication.java ├── stream-producer ├── pom.xml └── src │ └── main │ ├── java │ └── com │ │ └── didispace │ │ ├── App2.java │ │ ├── HelloApplication.java │ │ ├── SinkSender.java │ │ ├── SinkSender2.java │ │ ├── SinkSender3.java │ │ ├── SinkSender4.java │ │ └── User.java │ └── resources │ └── application.properties ├── trace-1 ├── pom.xml └── src │ └── main │ ├── java │ └── com │ │ └── didispace │ │ └── TraceApplication.java │ └── resources │ └── application.properties ├── trace-2 ├── pom.xml └── src │ └── main │ ├── java │ └── com │ │ └── didispace │ │ └── TraceApplication.java │ └── resources │ ├── application.properties │ └── logback-spring.xml ├── trace-stream-1 ├── pom.xml └── src │ └── main │ ├── java │ └── com │ │ └── didispace │ │ └── TraceApplication.java │ └── resources │ └── application.properties ├── trace-stream-2 ├── pom.xml └── src │ └── main │ ├── java │ └── com │ │ └── didispace │ │ └── TraceApplication.java │ └── resources │ └── application.properties ├── turbine-amqp ├── pom.xml └── src │ └── main │ ├── java │ └── com │ │ └── didispace │ │ └── TurbineApplication.java │ └── resources │ └── application.properties ├── turbine ├── pom.xml └── src │ └── main │ ├── java │ └── com │ │ └── didispace │ │ └── TurbineApplication.java │ └── resources │ └── application.properties ├── zipkin-server-stream-mysql ├── pom.xml └── src │ └── main │ ├── java │ └── com │ │ └── didispace │ │ └── ZipkinApplication.java │ └── resources │ ├── application.properties │ └── mysql.sql ├── zipkin-server-stream ├── pom.xml └── src │ └── main │ ├── java │ └── com │ │ └── didispace │ │ └── ZipkinApplication.java │ └── resources │ └── application.properties └── zipkin-server ├── pom.xml └── src └── main ├── java └── com │ └── didispace │ └── ZipkinApplication.java └── resources └── application.properties /.gitignore: -------------------------------------------------------------------------------- 1 | *.class 2 | 3 | # Package Files # 4 | *.jar 5 | *.war 6 | *.ear 7 | 8 | # idea Files 9 | .idea 10 | *.iml 11 | target 12 | 13 | # log Files 14 | *.log 15 | 16 | -------------------------------------------------------------------------------- /1-Brixton版教程示例/Chapter1-1-1/compute-service/src/main/java/com/didispace/ComputeServiceApplication.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.springframework.boot.autoconfigure.SpringBootApplication; 4 | import org.springframework.boot.builder.SpringApplicationBuilder; 5 | import org.springframework.cloud.client.discovery.EnableDiscoveryClient; 6 | 7 | @EnableDiscoveryClient 8 | @SpringBootApplication 9 | public class ComputeServiceApplication { 10 | 11 | public static void main(String[] args) { 12 | new SpringApplicationBuilder(ComputeServiceApplication.class).web(true).run(args); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /1-Brixton版教程示例/Chapter1-1-1/compute-service/src/main/java/com/didispace/web/ComputeController.java: -------------------------------------------------------------------------------- 1 | package com.didispace.web; 2 | 3 | import org.apache.log4j.Logger; 4 | import org.springframework.beans.factory.annotation.Autowired; 5 | import org.springframework.cloud.client.ServiceInstance; 6 | import org.springframework.cloud.client.discovery.DiscoveryClient; 7 | import org.springframework.web.bind.annotation.RequestMapping; 8 | import org.springframework.web.bind.annotation.RequestMethod; 9 | import org.springframework.web.bind.annotation.RequestParam; 10 | import org.springframework.web.bind.annotation.RestController; 11 | 12 | @RestController 13 | public class ComputeController { 14 | 15 | private final Logger logger = Logger.getLogger(getClass()); 16 | 17 | @Autowired 18 | private DiscoveryClient client; 19 | 20 | @RequestMapping(value = "/add" ,method = RequestMethod.GET) 21 | public Integer add(@RequestParam Integer a, @RequestParam Integer b) { 22 | ServiceInstance instance = client.getLocalServiceInstance(); 23 | Integer r = a + b; 24 | logger.info("/add, host:" + instance.getHost() + ", service_id:" + instance.getServiceId() + ", result:" + r); 25 | return r; 26 | } 27 | 28 | } -------------------------------------------------------------------------------- /1-Brixton版教程示例/Chapter1-1-1/compute-service/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | spring.application.name=compute-service 2 | 3 | server.port=2222 4 | 5 | eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/ 6 | 7 | -------------------------------------------------------------------------------- /1-Brixton版教程示例/Chapter1-1-1/eureka-server/src/main/java/com/didispace/Application.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.springframework.boot.autoconfigure.SpringBootApplication; 4 | import org.springframework.boot.builder.SpringApplicationBuilder; 5 | import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; 6 | 7 | @EnableEurekaServer 8 | @SpringBootApplication 9 | public class Application { 10 | 11 | public static void main(String[] args) { 12 | new SpringApplicationBuilder(Application.class).web(true).run(args); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /1-Brixton版教程示例/Chapter1-1-1/eureka-server/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | server.port=1111 2 | #eureka.instance.hostname=localhost 3 | 4 | eureka.client.register-with-eureka=false 5 | eureka.client.fetch-registry=false 6 | eureka.client.serviceUrl.defaultZone=http://localhost:${server.port}/eureka/ -------------------------------------------------------------------------------- /1-Brixton版教程示例/Chapter1-1-2/eureka-feign/src/main/java/com/didispace/FeignApplication.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | import org.springframework.cloud.client.discovery.EnableDiscoveryClient; 6 | import org.springframework.cloud.netflix.feign.EnableFeignClients; 7 | 8 | @SpringBootApplication 9 | @EnableDiscoveryClient 10 | @EnableFeignClients 11 | public class FeignApplication { 12 | 13 | public static void main(String[] args) { 14 | SpringApplication.run(FeignApplication.class, args); 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /1-Brixton版教程示例/Chapter1-1-2/eureka-feign/src/main/java/com/didispace/service/ComputeClient.java: -------------------------------------------------------------------------------- 1 | package com.didispace.service; 2 | 3 | import org.springframework.cloud.netflix.feign.FeignClient; 4 | import org.springframework.web.bind.annotation.RequestMapping; 5 | import org.springframework.web.bind.annotation.RequestMethod; 6 | import org.springframework.web.bind.annotation.RequestParam; 7 | 8 | @FeignClient("compute-service") 9 | public interface ComputeClient { 10 | 11 | @RequestMapping(method = RequestMethod.GET, value = "/add") 12 | Integer add(@RequestParam(value = "a") Integer a, @RequestParam(value = "b") Integer b); 13 | 14 | } -------------------------------------------------------------------------------- /1-Brixton版教程示例/Chapter1-1-2/eureka-feign/src/main/java/com/didispace/web/ConsumerController.java: -------------------------------------------------------------------------------- 1 | package com.didispace.web; 2 | 3 | import com.didispace.service.ComputeClient; 4 | import org.springframework.beans.factory.annotation.Autowired; 5 | import org.springframework.web.bind.annotation.RequestMapping; 6 | import org.springframework.web.bind.annotation.RequestMethod; 7 | import org.springframework.web.bind.annotation.RestController; 8 | 9 | @RestController 10 | public class ConsumerController { 11 | 12 | @Autowired 13 | ComputeClient computeClient; 14 | 15 | @RequestMapping(value = "/add", method = RequestMethod.GET) 16 | public Integer add() { 17 | return computeClient.add(10, 20); 18 | } 19 | 20 | } -------------------------------------------------------------------------------- /1-Brixton版教程示例/Chapter1-1-2/eureka-feign/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | spring.application.name=feign-consumer 2 | server.port=3333 3 | 4 | eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/ 5 | 6 | -------------------------------------------------------------------------------- /1-Brixton版教程示例/Chapter1-1-2/eureka-ribbon/src/main/java/com/didispace/RibbonApplication.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | import org.springframework.cloud.client.discovery.EnableDiscoveryClient; 6 | import org.springframework.cloud.client.loadbalancer.LoadBalanced; 7 | import org.springframework.context.annotation.Bean; 8 | import org.springframework.web.client.RestTemplate; 9 | 10 | @SpringBootApplication 11 | @EnableDiscoveryClient 12 | public class RibbonApplication { 13 | 14 | @Bean 15 | @LoadBalanced 16 | RestTemplate restTemplate() { 17 | return new RestTemplate(); 18 | } 19 | 20 | public static void main(String[] args) { 21 | SpringApplication.run(RibbonApplication.class, args); 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /1-Brixton版教程示例/Chapter1-1-2/eureka-ribbon/src/main/java/com/didispace/web/ConsumerController.java: -------------------------------------------------------------------------------- 1 | package com.didispace.web; 2 | 3 | import org.springframework.beans.factory.annotation.Autowired; 4 | import org.springframework.web.bind.annotation.RequestMapping; 5 | import org.springframework.web.bind.annotation.RequestMethod; 6 | import org.springframework.web.bind.annotation.RestController; 7 | import org.springframework.web.client.RestTemplate; 8 | 9 | @RestController 10 | public class ConsumerController { 11 | 12 | @Autowired 13 | RestTemplate restTemplate; 14 | 15 | @RequestMapping(value = "/add", method = RequestMethod.GET) 16 | public String add() { 17 | return restTemplate.getForEntity("http://COMPUTE-SERVICE/add?a=10&b=20", String.class).getBody(); 18 | } 19 | 20 | 21 | } -------------------------------------------------------------------------------- /1-Brixton版教程示例/Chapter1-1-2/eureka-ribbon/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | spring.application.name=ribbon-consumer 2 | server.port=3333 3 | 4 | eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/ 5 | 6 | -------------------------------------------------------------------------------- /1-Brixton版教程示例/Chapter1-1-3/compute-service/src/main/java/com/didispace/ComputeServiceApplication.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.springframework.boot.autoconfigure.SpringBootApplication; 4 | import org.springframework.boot.builder.SpringApplicationBuilder; 5 | import org.springframework.cloud.client.discovery.EnableDiscoveryClient; 6 | 7 | @EnableDiscoveryClient 8 | @SpringBootApplication 9 | public class ComputeServiceApplication { 10 | 11 | public static void main(String[] args) { 12 | new SpringApplicationBuilder(ComputeServiceApplication.class).web(true).run(args); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /1-Brixton版教程示例/Chapter1-1-3/compute-service/src/main/java/com/didispace/web/ComputeController.java: -------------------------------------------------------------------------------- 1 | package com.didispace.web; 2 | 3 | import org.apache.log4j.Logger; 4 | import org.springframework.beans.factory.annotation.Autowired; 5 | import org.springframework.cloud.client.ServiceInstance; 6 | import org.springframework.cloud.client.discovery.DiscoveryClient; 7 | import org.springframework.web.bind.annotation.RequestMapping; 8 | import org.springframework.web.bind.annotation.RequestMethod; 9 | import org.springframework.web.bind.annotation.RequestParam; 10 | import org.springframework.web.bind.annotation.RestController; 11 | 12 | @RestController 13 | public class ComputeController { 14 | 15 | private final Logger logger = Logger.getLogger(getClass()); 16 | 17 | @Autowired 18 | private DiscoveryClient client; 19 | 20 | @RequestMapping(value = "/add" ,method = RequestMethod.GET) 21 | public Integer add(@RequestParam Integer a, @RequestParam Integer b) { 22 | ServiceInstance instance = client.getLocalServiceInstance(); 23 | Integer r = a + b; 24 | logger.info("/add, host:" + instance.getHost() + ", service_id:" + instance.getServiceId() + ", result:" + r); 25 | return r; 26 | } 27 | 28 | } -------------------------------------------------------------------------------- /1-Brixton版教程示例/Chapter1-1-3/compute-service/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | spring.application.name=compute-service 2 | 3 | server.port=2222 4 | 5 | eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/ 6 | 7 | -------------------------------------------------------------------------------- /1-Brixton版教程示例/Chapter1-1-3/eureka-feign/src/main/java/com/didispace/FeignApplication.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | import org.springframework.cloud.client.discovery.EnableDiscoveryClient; 6 | import org.springframework.cloud.netflix.feign.EnableFeignClients; 7 | 8 | @SpringBootApplication 9 | @EnableDiscoveryClient 10 | @EnableFeignClients 11 | public class FeignApplication { 12 | 13 | public static void main(String[] args) { 14 | SpringApplication.run(FeignApplication.class, args); 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /1-Brixton版教程示例/Chapter1-1-3/eureka-feign/src/main/java/com/didispace/service/ComputeClient.java: -------------------------------------------------------------------------------- 1 | package com.didispace.service; 2 | 3 | import org.springframework.cloud.netflix.feign.FeignClient; 4 | import org.springframework.web.bind.annotation.RequestMapping; 5 | import org.springframework.web.bind.annotation.RequestMethod; 6 | import org.springframework.web.bind.annotation.RequestParam; 7 | 8 | @FeignClient(value = "compute-service", fallback = ComputeClientHystrix.class) 9 | public interface ComputeClient { 10 | 11 | @RequestMapping(method = RequestMethod.GET, value = "/add") 12 | Integer add(@RequestParam(value = "a") Integer a, @RequestParam(value = "b") Integer b); 13 | 14 | } -------------------------------------------------------------------------------- /1-Brixton版教程示例/Chapter1-1-3/eureka-feign/src/main/java/com/didispace/service/ComputeClientHystrix.java: -------------------------------------------------------------------------------- 1 | package com.didispace.service; 2 | 3 | import org.springframework.stereotype.Component; 4 | import org.springframework.web.bind.annotation.RequestParam; 5 | 6 | @Component 7 | public class ComputeClientHystrix implements ComputeClient { 8 | 9 | @Override 10 | public Integer add(@RequestParam(value = "a") Integer a, @RequestParam(value = "b") Integer b) { 11 | return -9999; 12 | } 13 | 14 | } -------------------------------------------------------------------------------- /1-Brixton版教程示例/Chapter1-1-3/eureka-feign/src/main/java/com/didispace/web/ConsumerController.java: -------------------------------------------------------------------------------- 1 | package com.didispace.web; 2 | 3 | import com.didispace.service.ComputeClient; 4 | import org.springframework.beans.factory.annotation.Autowired; 5 | import org.springframework.web.bind.annotation.RequestMapping; 6 | import org.springframework.web.bind.annotation.RequestMethod; 7 | import org.springframework.web.bind.annotation.RestController; 8 | 9 | @RestController 10 | public class ConsumerController { 11 | 12 | @Autowired 13 | ComputeClient computeClient; 14 | 15 | @RequestMapping(value = "/add", method = RequestMethod.GET) 16 | public Integer add() { 17 | return computeClient.add(10, 20); 18 | } 19 | 20 | } -------------------------------------------------------------------------------- /1-Brixton版教程示例/Chapter1-1-3/eureka-ribbon/src/main/java/com/didispace/RibbonApplication.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker; 6 | import org.springframework.cloud.client.discovery.EnableDiscoveryClient; 7 | import org.springframework.cloud.client.loadbalancer.LoadBalanced; 8 | import org.springframework.context.annotation.Bean; 9 | import org.springframework.web.client.RestTemplate; 10 | 11 | @SpringBootApplication 12 | @EnableDiscoveryClient 13 | @EnableCircuitBreaker 14 | public class RibbonApplication { 15 | 16 | @Bean 17 | @LoadBalanced 18 | RestTemplate restTemplate() { 19 | return new RestTemplate(); 20 | } 21 | 22 | public static void main(String[] args) { 23 | SpringApplication.run(RibbonApplication.class, args); 24 | } 25 | 26 | } 27 | -------------------------------------------------------------------------------- /1-Brixton版教程示例/Chapter1-1-3/eureka-ribbon/src/main/java/com/didispace/service/ComputeService.java: -------------------------------------------------------------------------------- 1 | package com.didispace.service; 2 | 3 | import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand; 4 | import org.springframework.beans.factory.annotation.Autowired; 5 | import org.springframework.stereotype.Service; 6 | import org.springframework.web.client.RestTemplate; 7 | 8 | @Service 9 | public class ComputeService { 10 | 11 | @Autowired 12 | RestTemplate restTemplate; 13 | 14 | @HystrixCommand(fallbackMethod = "addServiceFallback") 15 | public String addService() { 16 | return restTemplate.getForEntity("http://COMPUTE-SERVICE/add?a=10&b=20", String.class).getBody(); 17 | } 18 | 19 | public String addServiceFallback() { 20 | return "error"; 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /1-Brixton版教程示例/Chapter1-1-3/eureka-ribbon/src/main/java/com/didispace/web/ConsumerController.java: -------------------------------------------------------------------------------- 1 | package com.didispace.web; 2 | 3 | import com.didispace.service.ComputeService; 4 | import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand; 5 | import org.springframework.beans.factory.annotation.Autowired; 6 | import org.springframework.web.bind.annotation.RequestMapping; 7 | import org.springframework.web.bind.annotation.RequestMethod; 8 | import org.springframework.web.bind.annotation.RestController; 9 | import org.springframework.web.client.RestTemplate; 10 | 11 | import java.util.Map; 12 | 13 | @RestController 14 | public class ConsumerController { 15 | 16 | @Autowired 17 | private ComputeService computeService; 18 | 19 | @RequestMapping(value = "/add", method = RequestMethod.GET) 20 | public String add() { 21 | return computeService.addService(); 22 | } 23 | 24 | } -------------------------------------------------------------------------------- /1-Brixton版教程示例/Chapter1-1-3/eureka-server/src/main/java/com/didispace/Application.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.springframework.boot.autoconfigure.SpringBootApplication; 4 | import org.springframework.boot.builder.SpringApplicationBuilder; 5 | import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; 6 | 7 | @EnableEurekaServer 8 | @SpringBootApplication 9 | public class Application { 10 | 11 | public static void main(String[] args) { 12 | new SpringApplicationBuilder(Application.class).web(true).run(args); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /1-Brixton版教程示例/Chapter1-1-3/eureka-server/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | server.port=1111 2 | #eureka.instance.hostname=localhost 3 | 4 | eureka.client.register-with-eureka=false 5 | eureka.client.fetch-registry=false 6 | eureka.client.serviceUrl.defaultZone=http://localhost:${server.port}/eureka/ -------------------------------------------------------------------------------- /1-Brixton版教程示例/Chapter1-1-4/config-client/src/main/java/com/didispace/Application.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.springframework.boot.autoconfigure.SpringBootApplication; 4 | import org.springframework.boot.builder.SpringApplicationBuilder; 5 | 6 | @SpringBootApplication 7 | public class Application { 8 | 9 | public static void main(String[] args) { 10 | new SpringApplicationBuilder(Application.class).web(true).run(args); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /1-Brixton版教程示例/Chapter1-1-4/config-client/src/main/java/com/didispace/web/TestController.java: -------------------------------------------------------------------------------- 1 | package com.didispace.web; 2 | 3 | import org.springframework.beans.factory.annotation.Value; 4 | import org.springframework.cloud.context.config.annotation.RefreshScope; 5 | import org.springframework.web.bind.annotation.RequestMapping; 6 | import org.springframework.web.bind.annotation.RestController; 7 | 8 | @RefreshScope 9 | @RestController 10 | class TestController { 11 | 12 | @Value("${from}") 13 | private String from; 14 | 15 | @RequestMapping("/from") 16 | public String from() { 17 | 18 | return this.from; 19 | } 20 | 21 | public void setFrom(String from) { 22 | this.from = from; 23 | } 24 | 25 | public String getFrom() { 26 | return from; 27 | } 28 | 29 | } -------------------------------------------------------------------------------- /1-Brixton版教程示例/Chapter1-1-4/config-client/src/main/resources/bootstrap.properties: -------------------------------------------------------------------------------- 1 | spring.application.name=didispace 2 | spring.cloud.config.profile=dev 3 | spring.cloud.config.uri=http://localhost:7001/ 4 | 5 | server.port=7002 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /1-Brixton版教程示例/Chapter1-1-4/config-repo/didispace-dev.properties: -------------------------------------------------------------------------------- 1 | from=git-dev-1.0 -------------------------------------------------------------------------------- /1-Brixton版教程示例/Chapter1-1-4/config-repo/didispace-prod.properties: -------------------------------------------------------------------------------- 1 | from=git-prod-1.0 -------------------------------------------------------------------------------- /1-Brixton版教程示例/Chapter1-1-4/config-repo/didispace-test.properties: -------------------------------------------------------------------------------- 1 | from=git-test-1.0 -------------------------------------------------------------------------------- /1-Brixton版教程示例/Chapter1-1-4/config-repo/didispace.properties: -------------------------------------------------------------------------------- 1 | from=git-default-1.0 2 | -------------------------------------------------------------------------------- /1-Brixton版教程示例/Chapter1-1-4/config-server/src/main/java/com/didispace/Application.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.springframework.boot.autoconfigure.SpringBootApplication; 4 | import org.springframework.boot.builder.SpringApplicationBuilder; 5 | import org.springframework.cloud.config.server.EnableConfigServer; 6 | 7 | @EnableConfigServer 8 | @SpringBootApplication 9 | public class Application { 10 | 11 | public static void main(String[] args) { 12 | new SpringApplicationBuilder(Application.class).web(true).run(args); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /1-Brixton版教程示例/Chapter1-1-4/config-server/src/main/resources/application.properties: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SpringForAll/SpringCloud-Learning/d1d38ff996caa7ec51ada8e4c7ecbb8fa4fff001/1-Brixton版教程示例/Chapter1-1-4/config-server/src/main/resources/application.properties -------------------------------------------------------------------------------- /1-Brixton版教程示例/Chapter1-1-4/config-server/src/main/resources/didispace-dev.properties: -------------------------------------------------------------------------------- 1 | from=local-dev -------------------------------------------------------------------------------- /1-Brixton版教程示例/Chapter1-1-4/config-server/src/main/resources/didispace-prod.properties: -------------------------------------------------------------------------------- 1 | from=local-prod -------------------------------------------------------------------------------- /1-Brixton版教程示例/Chapter1-1-4/config-server/src/main/resources/didispace-test.properties: -------------------------------------------------------------------------------- 1 | from=local-test -------------------------------------------------------------------------------- /1-Brixton版教程示例/Chapter1-1-4/config-server/src/main/resources/didispace.properties: -------------------------------------------------------------------------------- 1 | from=local -------------------------------------------------------------------------------- /1-Brixton版教程示例/Chapter1-1-5/api-gateway/src/main/java/com/didispace/Application.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import com.didispace.filter.AccessFilter; 4 | import org.springframework.boot.builder.SpringApplicationBuilder; 5 | import org.springframework.cloud.client.SpringCloudApplication; 6 | import org.springframework.cloud.netflix.zuul.EnableZuulProxy; 7 | import org.springframework.context.annotation.Bean; 8 | 9 | @EnableZuulProxy 10 | @SpringCloudApplication 11 | public class Application { 12 | 13 | public static void main(String[] args) { 14 | new SpringApplicationBuilder(Application.class).web(true).run(args); 15 | } 16 | 17 | @Bean 18 | public AccessFilter accessFilter() { 19 | return new AccessFilter(); 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /1-Brixton版教程示例/Chapter1-1-5/api-gateway/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | spring.application.name=api-gateway 2 | server.port=5555 3 | 4 | # routes to serviceId 5 | zuul.routes.api-a.path=/api-a/** 6 | zuul.routes.api-a.serviceId=service-A 7 | 8 | zuul.routes.api-b.path=/api-b/** 9 | zuul.routes.api-b.serviceId=service-B 10 | 11 | # routes to url 12 | zuul.routes.api-a-url.path=/api-a-url/** 13 | zuul.routes.api-a-url.url=http://localhost:2222/ 14 | 15 | eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/ -------------------------------------------------------------------------------- /1-Brixton版教程示例/Chapter1-1-5/eureka-server/src/main/java/com/didispace/Application.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.springframework.boot.autoconfigure.SpringBootApplication; 4 | import org.springframework.boot.builder.SpringApplicationBuilder; 5 | import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; 6 | 7 | @EnableEurekaServer 8 | @SpringBootApplication 9 | public class Application { 10 | 11 | public static void main(String[] args) { 12 | new SpringApplicationBuilder(Application.class).web(true).run(args); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /1-Brixton版教程示例/Chapter1-1-5/eureka-server/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | server.port=1111 2 | #eureka.instance.hostname=localhost 3 | 4 | eureka.client.register-with-eureka=false 5 | eureka.client.fetch-registry=false 6 | eureka.client.serviceUrl.defaultZone=http://localhost:${server.port}/eureka/ -------------------------------------------------------------------------------- /1-Brixton版教程示例/Chapter1-1-5/service-A/src/main/java/com/didispace/ComputeServiceApplication.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.springframework.boot.autoconfigure.SpringBootApplication; 4 | import org.springframework.boot.builder.SpringApplicationBuilder; 5 | import org.springframework.cloud.client.discovery.EnableDiscoveryClient; 6 | 7 | @EnableDiscoveryClient 8 | @SpringBootApplication 9 | public class ComputeServiceApplication { 10 | 11 | public static void main(String[] args) { 12 | new SpringApplicationBuilder(ComputeServiceApplication.class).web(true).run(args); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /1-Brixton版教程示例/Chapter1-1-5/service-A/src/main/java/com/didispace/web/ComputeController.java: -------------------------------------------------------------------------------- 1 | package com.didispace.web; 2 | 3 | import org.apache.log4j.Logger; 4 | import org.springframework.beans.factory.annotation.Autowired; 5 | import org.springframework.cloud.client.ServiceInstance; 6 | import org.springframework.cloud.client.discovery.DiscoveryClient; 7 | import org.springframework.web.bind.annotation.RequestMapping; 8 | import org.springframework.web.bind.annotation.RequestMethod; 9 | import org.springframework.web.bind.annotation.RequestParam; 10 | import org.springframework.web.bind.annotation.RestController; 11 | 12 | @RestController 13 | public class ComputeController { 14 | 15 | private final Logger logger = Logger.getLogger(getClass()); 16 | 17 | @Autowired 18 | private DiscoveryClient client; 19 | 20 | @RequestMapping(value = "/add" ,method = RequestMethod.GET) 21 | public String add(@RequestParam Integer a, @RequestParam Integer b) { 22 | ServiceInstance instance = client.getLocalServiceInstance(); 23 | Integer r = a + b; 24 | logger.info("/add, host:" + instance.getHost() + ", service_id:" + instance.getServiceId() + ", result:" + r); 25 | return "From Service-A, Result is " + r; 26 | } 27 | 28 | } -------------------------------------------------------------------------------- /1-Brixton版教程示例/Chapter1-1-5/service-A/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | spring.application.name=service-A 2 | 3 | server.port=2222 4 | 5 | eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/ 6 | 7 | -------------------------------------------------------------------------------- /1-Brixton版教程示例/Chapter1-1-5/service-B/src/main/java/com/didispace/ComputeServiceApplication.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.springframework.boot.autoconfigure.SpringBootApplication; 4 | import org.springframework.boot.builder.SpringApplicationBuilder; 5 | import org.springframework.cloud.client.discovery.EnableDiscoveryClient; 6 | 7 | @EnableDiscoveryClient 8 | @SpringBootApplication 9 | public class ComputeServiceApplication { 10 | 11 | public static void main(String[] args) { 12 | new SpringApplicationBuilder(ComputeServiceApplication.class).web(true).run(args); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /1-Brixton版教程示例/Chapter1-1-5/service-B/src/main/java/com/didispace/web/ComputeController.java: -------------------------------------------------------------------------------- 1 | package com.didispace.web; 2 | 3 | import org.apache.log4j.Logger; 4 | import org.springframework.beans.factory.annotation.Autowired; 5 | import org.springframework.cloud.client.ServiceInstance; 6 | import org.springframework.cloud.client.discovery.DiscoveryClient; 7 | import org.springframework.web.bind.annotation.RequestMapping; 8 | import org.springframework.web.bind.annotation.RequestMethod; 9 | import org.springframework.web.bind.annotation.RequestParam; 10 | import org.springframework.web.bind.annotation.RestController; 11 | 12 | @RestController 13 | public class ComputeController { 14 | 15 | private final Logger logger = Logger.getLogger(getClass()); 16 | 17 | @Autowired 18 | private DiscoveryClient client; 19 | 20 | @RequestMapping(value = "/add" ,method = RequestMethod.GET) 21 | public String add(@RequestParam Integer a, @RequestParam Integer b) { 22 | ServiceInstance instance = client.getLocalServiceInstance(); 23 | Integer r = a + b; 24 | logger.info("/add, host:" + instance.getHost() + ", service_id:" + instance.getServiceId() + ", result:" + r); 25 | return "From Service-B, Result is " + r; 26 | } 27 | 28 | } -------------------------------------------------------------------------------- /1-Brixton版教程示例/Chapter1-1-5/service-B/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | spring.application.name=service-B 2 | 3 | server.port=3333 4 | 5 | eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/ 6 | 7 | -------------------------------------------------------------------------------- /1-Brixton版教程示例/Chapter1-1-5/service-B/src/test/java/com/didispace/ApplicationTests.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import com.didispace.web.ComputeController; 4 | import org.junit.Before; 5 | import org.junit.Test; 6 | import org.junit.runner.RunWith; 7 | import org.springframework.boot.test.SpringApplicationConfiguration; 8 | import org.springframework.mock.web.MockServletContext; 9 | import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; 10 | import org.springframework.test.context.web.WebAppConfiguration; 11 | import org.springframework.test.web.servlet.MockMvc; 12 | import org.springframework.test.web.servlet.setup.MockMvcBuilders; 13 | 14 | 15 | @RunWith(SpringJUnit4ClassRunner.class) 16 | @SpringApplicationConfiguration(classes = MockServletContext.class) 17 | @WebAppConfiguration 18 | public class ApplicationTests { 19 | 20 | private MockMvc mvc; 21 | 22 | @Before 23 | public void setUp() throws Exception { 24 | mvc = MockMvcBuilders.standaloneSetup(new ComputeController()).build(); 25 | } 26 | 27 | @Test 28 | public void getHello() throws Exception { 29 | } 30 | 31 | } 32 | -------------------------------------------------------------------------------- /1-Brixton版教程示例/Chapter1-1-6/compute-service/src/main/java/com/didispace/ComputeServiceApplication.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.springframework.boot.autoconfigure.SpringBootApplication; 4 | import org.springframework.boot.builder.SpringApplicationBuilder; 5 | import org.springframework.cloud.client.discovery.EnableDiscoveryClient; 6 | 7 | @EnableDiscoveryClient 8 | @SpringBootApplication 9 | public class ComputeServiceApplication { 10 | 11 | public static void main(String[] args) { 12 | new SpringApplicationBuilder(ComputeServiceApplication.class).web(true).run(args); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /1-Brixton版教程示例/Chapter1-1-6/compute-service/src/main/java/com/didispace/web/ComputeController.java: -------------------------------------------------------------------------------- 1 | package com.didispace.web; 2 | 3 | import org.apache.log4j.Logger; 4 | import org.springframework.beans.factory.annotation.Autowired; 5 | import org.springframework.cloud.client.ServiceInstance; 6 | import org.springframework.cloud.client.discovery.DiscoveryClient; 7 | import org.springframework.web.bind.annotation.RequestMapping; 8 | import org.springframework.web.bind.annotation.RequestMethod; 9 | import org.springframework.web.bind.annotation.RequestParam; 10 | import org.springframework.web.bind.annotation.RestController; 11 | 12 | @RestController 13 | public class ComputeController { 14 | 15 | private final Logger logger = Logger.getLogger(getClass()); 16 | 17 | @Autowired 18 | private DiscoveryClient client; 19 | 20 | @RequestMapping(value = "/add" ,method = RequestMethod.GET) 21 | public Integer add(@RequestParam Integer a, @RequestParam Integer b) { 22 | ServiceInstance instance = client.getLocalServiceInstance(); 23 | Integer r = a + b; 24 | logger.info("/add, host:" + instance.getHost() + ", service_id:" + instance.getServiceId() + ", result:" + r); 25 | return r; 26 | } 27 | 28 | } -------------------------------------------------------------------------------- /1-Brixton版教程示例/Chapter1-1-6/compute-service/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | spring.application.name=compute-service 2 | 3 | server.port=2222 4 | 5 | eureka.client.serviceUrl.defaultZone=http://peer1:1111/eureka/,http://peer2:1112/eureka/ -------------------------------------------------------------------------------- /1-Brixton版教程示例/Chapter1-1-6/eureka-server/src/main/java/com/didispace/Application.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.springframework.boot.autoconfigure.SpringBootApplication; 4 | import org.springframework.boot.builder.SpringApplicationBuilder; 5 | import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; 6 | 7 | @EnableEurekaServer 8 | @SpringBootApplication 9 | public class Application { 10 | 11 | public static void main(String[] args) { 12 | new SpringApplicationBuilder(Application.class).web(true).run(args); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /1-Brixton版教程示例/Chapter1-1-6/eureka-server/src/main/resources/application-peer1.properties: -------------------------------------------------------------------------------- 1 | spring.application.name=eureka-server 2 | server.port=1111 3 | eureka.instance.hostname=peer1 4 | 5 | eureka.client.serviceUrl.defaultZone=http://peer2:1112/eureka/ -------------------------------------------------------------------------------- /1-Brixton版教程示例/Chapter1-1-6/eureka-server/src/main/resources/application-peer2.properties: -------------------------------------------------------------------------------- 1 | spring.application.name=eureka-server 2 | server.port=1112 3 | eureka.instance.hostname=peer2 4 | 5 | eureka.client.serviceUrl.defaultZone=http://peer1:1111/eureka/ -------------------------------------------------------------------------------- /1-Brixton版教程示例/Chapter1-1-7/config-client-eureka-kafka/src/main/java/com/didispace/Application.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.springframework.boot.autoconfigure.SpringBootApplication; 4 | import org.springframework.boot.builder.SpringApplicationBuilder; 5 | import org.springframework.cloud.client.discovery.EnableDiscoveryClient; 6 | 7 | @EnableDiscoveryClient 8 | @SpringBootApplication 9 | public class Application { 10 | 11 | public static void main(String[] args) { 12 | new SpringApplicationBuilder(Application.class).web(true).run(args); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /1-Brixton版教程示例/Chapter1-1-7/config-client-eureka-kafka/src/main/java/com/didispace/web/TestController.java: -------------------------------------------------------------------------------- 1 | package com.didispace.web; 2 | 3 | import org.springframework.beans.factory.annotation.Value; 4 | import org.springframework.cloud.context.config.annotation.RefreshScope; 5 | import org.springframework.web.bind.annotation.RequestMapping; 6 | import org.springframework.web.bind.annotation.RestController; 7 | 8 | @RefreshScope 9 | @RestController 10 | public class TestController { 11 | 12 | @Value("${from}") 13 | private String from; 14 | 15 | @RequestMapping("/from") 16 | public String from() { 17 | return this.from; 18 | } 19 | 20 | public void setFrom(String from) { 21 | this.from = from; 22 | } 23 | 24 | public String getFrom() { 25 | return from; 26 | } 27 | 28 | } -------------------------------------------------------------------------------- /1-Brixton版教程示例/Chapter1-1-7/config-client-eureka-kafka/src/main/resources/bootstrap.properties: -------------------------------------------------------------------------------- 1 | spring.application.name=didispace 2 | server.port=7002 3 | 4 | eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/ 5 | 6 | spring.cloud.config.discovery.enabled=true 7 | spring.cloud.config.discovery.serviceId=config-server 8 | spring.cloud.config.profile=dev 9 | 10 | spring.cloud.config.failFast=true 11 | 12 | #kafka 13 | spring.cloud.stream.kafka.binder.zk-nodes=localhost:2181 14 | spring.cloud.stream.kafka.binder.brokers=localhost:9092 15 | 16 | spring.cloud.bus.trace.enabled=true -------------------------------------------------------------------------------- /1-Brixton版教程示例/Chapter1-1-7/config-client-eureka/src/main/java/com/didispace/Application.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.springframework.boot.autoconfigure.SpringBootApplication; 4 | import org.springframework.boot.builder.SpringApplicationBuilder; 5 | import org.springframework.cloud.client.discovery.EnableDiscoveryClient; 6 | 7 | @EnableDiscoveryClient 8 | @SpringBootApplication 9 | public class Application { 10 | 11 | public static void main(String[] args) { 12 | new SpringApplicationBuilder(Application.class).web(true).run(args); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /1-Brixton版教程示例/Chapter1-1-7/config-client-eureka/src/main/java/com/didispace/web/TestController.java: -------------------------------------------------------------------------------- 1 | package com.didispace.web; 2 | 3 | import org.springframework.beans.factory.annotation.Value; 4 | import org.springframework.cloud.context.config.annotation.RefreshScope; 5 | import org.springframework.web.bind.annotation.RequestMapping; 6 | import org.springframework.web.bind.annotation.RestController; 7 | 8 | @RefreshScope 9 | @RestController 10 | public class TestController { 11 | 12 | @Value("${from}") 13 | private String from; 14 | 15 | @RequestMapping("/from") 16 | public String from() { 17 | return this.from; 18 | } 19 | 20 | public void setFrom(String from) { 21 | this.from = from; 22 | } 23 | 24 | public String getFrom() { 25 | return from; 26 | } 27 | 28 | } -------------------------------------------------------------------------------- /1-Brixton版教程示例/Chapter1-1-7/config-client-eureka/src/main/resources/bootstrap.properties: -------------------------------------------------------------------------------- 1 | spring.application.name=didispace 2 | server.port=7002 3 | 4 | eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/ 5 | 6 | spring.cloud.config.discovery.enabled=true 7 | spring.cloud.config.discovery.serviceId=config-server 8 | spring.cloud.config.profile=dev 9 | 10 | spring.cloud.config.failFast=true 11 | 12 | spring.rabbitmq.host=localhost 13 | spring.rabbitmq.port=5672 14 | spring.rabbitmq.username=springcloud 15 | spring.rabbitmq.password=123456 -------------------------------------------------------------------------------- /1-Brixton版教程示例/Chapter1-1-7/config-repo/didispace-dev.properties: -------------------------------------------------------------------------------- 1 | from=git-dev-3.0 -------------------------------------------------------------------------------- /1-Brixton版教程示例/Chapter1-1-7/config-repo/didispace-prod.properties: -------------------------------------------------------------------------------- 1 | from=git-prod-1.0 -------------------------------------------------------------------------------- /1-Brixton版教程示例/Chapter1-1-7/config-repo/didispace-test.properties: -------------------------------------------------------------------------------- 1 | from=git-test-1.0 -------------------------------------------------------------------------------- /1-Brixton版教程示例/Chapter1-1-7/config-repo/didispace.properties: -------------------------------------------------------------------------------- 1 | from=git-default-1.0 2 | -------------------------------------------------------------------------------- /1-Brixton版教程示例/Chapter1-1-7/config-server-eureka-kafka/src/main/java/com/didispace/Application.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.springframework.boot.autoconfigure.SpringBootApplication; 4 | import org.springframework.boot.builder.SpringApplicationBuilder; 5 | import org.springframework.cloud.client.discovery.EnableDiscoveryClient; 6 | import org.springframework.cloud.config.server.EnableConfigServer; 7 | 8 | @EnableDiscoveryClient 9 | @EnableConfigServer 10 | @SpringBootApplication 11 | public class Application { 12 | 13 | public static void main(String[] args) { 14 | new SpringApplicationBuilder(Application.class).web(true).run(args); 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /1-Brixton版教程示例/Chapter1-1-7/config-server-eureka-kafka/src/main/resources/application.properties: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SpringForAll/SpringCloud-Learning/d1d38ff996caa7ec51ada8e4c7ecbb8fa4fff001/1-Brixton版教程示例/Chapter1-1-7/config-server-eureka-kafka/src/main/resources/application.properties -------------------------------------------------------------------------------- /1-Brixton版教程示例/Chapter1-1-7/config-server-eureka-kafka/src/main/resources/didispace-dev.properties: -------------------------------------------------------------------------------- 1 | from=local-dev -------------------------------------------------------------------------------- /1-Brixton版教程示例/Chapter1-1-7/config-server-eureka-kafka/src/main/resources/didispace-prod.properties: -------------------------------------------------------------------------------- 1 | from=local-prod -------------------------------------------------------------------------------- /1-Brixton版教程示例/Chapter1-1-7/config-server-eureka-kafka/src/main/resources/didispace-test.properties: -------------------------------------------------------------------------------- 1 | from=local-test -------------------------------------------------------------------------------- /1-Brixton版教程示例/Chapter1-1-7/config-server-eureka-kafka/src/main/resources/didispace.properties: -------------------------------------------------------------------------------- 1 | from=local -------------------------------------------------------------------------------- /1-Brixton版教程示例/Chapter1-1-7/config-server-eureka/src/main/java/com/didispace/Application.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.springframework.boot.autoconfigure.SpringBootApplication; 4 | import org.springframework.boot.builder.SpringApplicationBuilder; 5 | import org.springframework.cloud.client.discovery.EnableDiscoveryClient; 6 | import org.springframework.cloud.config.server.EnableConfigServer; 7 | 8 | @EnableDiscoveryClient 9 | @EnableConfigServer 10 | @SpringBootApplication 11 | public class Application { 12 | 13 | public static void main(String[] args) { 14 | new SpringApplicationBuilder(Application.class).web(true).run(args); 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /1-Brixton版教程示例/Chapter1-1-7/config-server-eureka/src/main/resources/application.properties: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SpringForAll/SpringCloud-Learning/d1d38ff996caa7ec51ada8e4c7ecbb8fa4fff001/1-Brixton版教程示例/Chapter1-1-7/config-server-eureka/src/main/resources/application.properties -------------------------------------------------------------------------------- /1-Brixton版教程示例/Chapter1-1-7/config-server-eureka/src/main/resources/didispace-dev.properties: -------------------------------------------------------------------------------- 1 | from=local-dev -------------------------------------------------------------------------------- /1-Brixton版教程示例/Chapter1-1-7/config-server-eureka/src/main/resources/didispace-prod.properties: -------------------------------------------------------------------------------- 1 | from=local-prod -------------------------------------------------------------------------------- /1-Brixton版教程示例/Chapter1-1-7/config-server-eureka/src/main/resources/didispace-test.properties: -------------------------------------------------------------------------------- 1 | from=local-test -------------------------------------------------------------------------------- /1-Brixton版教程示例/Chapter1-1-7/config-server-eureka/src/main/resources/didispace.properties: -------------------------------------------------------------------------------- 1 | from=local -------------------------------------------------------------------------------- /1-Brixton版教程示例/Chapter1-1-8/config-client-eureka/src/main/java/com/didispace/Application.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.springframework.boot.autoconfigure.SpringBootApplication; 4 | import org.springframework.boot.builder.SpringApplicationBuilder; 5 | import org.springframework.cloud.client.discovery.EnableDiscoveryClient; 6 | 7 | @EnableDiscoveryClient 8 | @SpringBootApplication 9 | public class Application { 10 | 11 | public static void main(String[] args) { 12 | new SpringApplicationBuilder(Application.class).web(true).run(args); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /1-Brixton版教程示例/Chapter1-1-8/config-client-eureka/src/main/java/com/didispace/web/TestController.java: -------------------------------------------------------------------------------- 1 | package com.didispace.web; 2 | 3 | import org.springframework.beans.factory.annotation.Value; 4 | import org.springframework.cloud.context.config.annotation.RefreshScope; 5 | import org.springframework.web.bind.annotation.RequestMapping; 6 | import org.springframework.web.bind.annotation.RestController; 7 | 8 | @RefreshScope 9 | @RestController 10 | public class TestController { 11 | 12 | @Value("${from}") 13 | private String from; 14 | 15 | @RequestMapping("/from") 16 | public String from() { 17 | return this.from; 18 | } 19 | 20 | public void setFrom(String from) { 21 | this.from = from; 22 | } 23 | 24 | public String getFrom() { 25 | return from; 26 | } 27 | 28 | } -------------------------------------------------------------------------------- /1-Brixton版教程示例/Chapter1-1-8/config-client-eureka/src/main/resources/bootstrap.properties: -------------------------------------------------------------------------------- 1 | spring.application.name=didispace 2 | server.port=7002 3 | 4 | eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/ 5 | 6 | spring.cloud.config.discovery.enabled=true 7 | spring.cloud.config.discovery.serviceId=config-server 8 | spring.cloud.config.profile=dev 9 | 10 | spring.cloud.config.failFast=true -------------------------------------------------------------------------------- /1-Brixton版教程示例/Chapter1-1-8/config-repo/didispace-dev.properties: -------------------------------------------------------------------------------- 1 | from=git-dev-1.0 -------------------------------------------------------------------------------- /1-Brixton版教程示例/Chapter1-1-8/config-repo/didispace-prod.properties: -------------------------------------------------------------------------------- 1 | from=git-prod-1.0 -------------------------------------------------------------------------------- /1-Brixton版教程示例/Chapter1-1-8/config-repo/didispace-test.properties: -------------------------------------------------------------------------------- 1 | from=git-test-1.0 -------------------------------------------------------------------------------- /1-Brixton版教程示例/Chapter1-1-8/config-repo/didispace.properties: -------------------------------------------------------------------------------- 1 | from=git-default-1.0 2 | -------------------------------------------------------------------------------- /1-Brixton版教程示例/Chapter1-1-8/config-server-eureka/src/main/java/com/didispace/Application.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.springframework.boot.autoconfigure.SpringBootApplication; 4 | import org.springframework.boot.builder.SpringApplicationBuilder; 5 | import org.springframework.cloud.client.discovery.EnableDiscoveryClient; 6 | import org.springframework.cloud.config.server.EnableConfigServer; 7 | 8 | @EnableDiscoveryClient 9 | @EnableConfigServer 10 | @SpringBootApplication 11 | public class Application { 12 | 13 | public static void main(String[] args) { 14 | new SpringApplicationBuilder(Application.class).web(true).run(args); 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /1-Brixton版教程示例/Chapter1-1-8/config-server-eureka/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | spring.application.name=config-server 2 | server.port=7001 3 | 4 | eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/ 5 | 6 | # git¹ÜÀíÅäÖà 7 | spring.cloud.config.server.git.uri=http://git.oschina.net/didispace/SpringCloud-Learning/ 8 | spring.cloud.config.server.git.searchPaths=Chapter1-1-8/config-repo 9 | spring.cloud.config.server.git.username=username 10 | spring.cloud.config.server.git.password=password 11 | -------------------------------------------------------------------------------- /1-Brixton版教程示例/Chapter1-1-8/config-server-eureka/src/main/resources/didispace-dev.properties: -------------------------------------------------------------------------------- 1 | from=local-dev -------------------------------------------------------------------------------- /1-Brixton版教程示例/Chapter1-1-8/config-server-eureka/src/main/resources/didispace-prod.properties: -------------------------------------------------------------------------------- 1 | from=local-prod -------------------------------------------------------------------------------- /1-Brixton版教程示例/Chapter1-1-8/config-server-eureka/src/main/resources/didispace-test.properties: -------------------------------------------------------------------------------- 1 | from=local-test -------------------------------------------------------------------------------- /1-Brixton版教程示例/Chapter1-1-8/config-server-eureka/src/main/resources/didispace.properties: -------------------------------------------------------------------------------- 1 | from=local -------------------------------------------------------------------------------- /2-Dalston版教程示例/api-gateway-with-eureka/src/main/java/com/didispace/Application.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.springframework.boot.builder.SpringApplicationBuilder; 4 | import org.springframework.cloud.client.SpringCloudApplication; 5 | import org.springframework.cloud.netflix.zuul.EnableZuulProxy; 6 | 7 | @EnableZuulProxy 8 | @SpringCloudApplication 9 | public class Application { 10 | 11 | public static void main(String[] args) { 12 | new SpringApplicationBuilder(Application.class).web(true).run(args); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /2-Dalston版教程示例/api-gateway-with-eureka/src/main/resources/application.yaml: -------------------------------------------------------------------------------- 1 | spring: 2 | application: 3 | name: api-gateway 4 | 5 | server: 6 | port: 1101 7 | 8 | zuul: 9 | routes: 10 | api-a: 11 | path: /api-a/** 12 | serviceId: eureka-client 13 | 14 | eureka: 15 | client: 16 | serviceUrl: 17 | defaultZone: http://localhost:1001/eureka/ 18 | -------------------------------------------------------------------------------- /2-Dalston版教程示例/api-gateway/src/main/java/com/didispace/Application.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.springframework.boot.builder.SpringApplicationBuilder; 4 | import org.springframework.cloud.client.SpringCloudApplication; 5 | import org.springframework.cloud.netflix.zuul.EnableZuulProxy; 6 | 7 | @EnableZuulProxy 8 | @SpringCloudApplication 9 | public class Application { 10 | 11 | public static void main(String[] args) { 12 | new SpringApplicationBuilder(Application.class).web(true).run(args); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /2-Dalston版教程示例/api-gateway/src/main/resources/application.yaml: -------------------------------------------------------------------------------- 1 | spring: 2 | application: 3 | name: api-gateway 4 | 5 | server: 6 | port: 1101 7 | 8 | zuul: 9 | routes: 10 | # single-instance 11 | api-a: 12 | path: /api-a/** 13 | url: http://localhost:2001/ 14 | # multi-instance 15 | api-b: 16 | path: /api-b/** 17 | serviceId: api-b 18 | 19 | api-b: 20 | ribbon: 21 | listOfServers: http://localhost:2001/, http://localhost:2002/ -------------------------------------------------------------------------------- /2-Dalston版教程示例/config-client/src/main/java/com/didispace/Application.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.springframework.boot.autoconfigure.SpringBootApplication; 4 | import org.springframework.boot.builder.SpringApplicationBuilder; 5 | 6 | //@EnableDiscoveryClient 7 | @SpringBootApplication 8 | public class Application { 9 | 10 | public static void main(String[] args) { 11 | new SpringApplicationBuilder(Application.class).web(true).run(args); 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /2-Dalston版教程示例/config-client/src/main/resources/bootstrap.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | application: 3 | name: config-client 4 | cloud: 5 | config: 6 | uri: http://localhost:1201/ 7 | profile: default 8 | label: master 9 | 10 | server: 11 | port: 2001 12 | 13 | -------------------------------------------------------------------------------- /2-Dalston版教程示例/config-server-git/src/main/java/com/didispace/Application.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.springframework.boot.autoconfigure.SpringBootApplication; 4 | import org.springframework.boot.builder.SpringApplicationBuilder; 5 | import org.springframework.cloud.config.server.EnableConfigServer; 6 | 7 | @EnableConfigServer 8 | @SpringBootApplication 9 | public class Application { 10 | 11 | public static void main(String[] args) { 12 | new SpringApplicationBuilder(Application.class).web(true).run(args); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /2-Dalston版教程示例/config-server-git/src/main/resources/application.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | application: 3 | name: config-server 4 | cloud: 5 | config: 6 | server: 7 | git: 8 | uri: http://git.oschina.net/didispace/config-repo-demo/ 9 | # search-paths: repo 10 | # username: 11 | # password: 12 | 13 | server: 14 | port: 1201 15 | -------------------------------------------------------------------------------- /2-Dalston版教程示例/consul-client/src/main/java/com/didispace/Application.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.springframework.boot.autoconfigure.SpringBootApplication; 4 | import org.springframework.boot.builder.SpringApplicationBuilder; 5 | import org.springframework.cloud.client.discovery.EnableDiscoveryClient; 6 | 7 | @EnableDiscoveryClient 8 | @SpringBootApplication 9 | public class Application { 10 | 11 | public static void main(String[] args) { 12 | new SpringApplicationBuilder(Application.class).web(true).run(args); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /2-Dalston版教程示例/consul-client/src/main/java/com/didispace/DcController.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.springframework.beans.factory.annotation.Autowired; 4 | import org.springframework.cloud.client.discovery.DiscoveryClient; 5 | import org.springframework.stereotype.Controller; 6 | import org.springframework.web.bind.annotation.GetMapping; 7 | import org.springframework.web.bind.annotation.RestController; 8 | 9 | /** 10 | * @author 翟永超 11 | * @create 2017/4/15. 12 | * @blog http://blog.didispace.com 13 | */ 14 | @RestController 15 | public class DcController { 16 | 17 | @Autowired 18 | DiscoveryClient discoveryClient; 19 | 20 | @GetMapping("/dc") 21 | public String dc() { 22 | String services = "Services: " + discoveryClient.getServices(); 23 | System.out.println(services); 24 | return services; 25 | } 26 | 27 | } 28 | -------------------------------------------------------------------------------- /2-Dalston版教程示例/consul-client/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | spring.application.name=consul-client 2 | server.port=2001 3 | 4 | spring.cloud.consul.host=localhost 5 | spring.cloud.consul.port=8500 6 | -------------------------------------------------------------------------------- /2-Dalston版教程示例/consul-consumer/src/main/java/com/didispace/Application.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.springframework.boot.autoconfigure.SpringBootApplication; 4 | import org.springframework.boot.builder.SpringApplicationBuilder; 5 | import org.springframework.cloud.client.discovery.EnableDiscoveryClient; 6 | import org.springframework.context.annotation.Bean; 7 | import org.springframework.web.client.RestTemplate; 8 | 9 | @EnableDiscoveryClient 10 | @SpringBootApplication 11 | public class Application { 12 | 13 | @Bean 14 | public RestTemplate restTemplate() { 15 | return new RestTemplate(); 16 | } 17 | 18 | public static void main(String[] args) { 19 | new SpringApplicationBuilder(Application.class).web(true).run(args); 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /2-Dalston版教程示例/consul-consumer/src/main/java/com/didispace/DcController.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.springframework.beans.factory.annotation.Autowired; 4 | import org.springframework.cloud.client.ServiceInstance; 5 | import org.springframework.cloud.client.loadbalancer.LoadBalancerClient; 6 | import org.springframework.web.bind.annotation.GetMapping; 7 | import org.springframework.web.bind.annotation.RestController; 8 | import org.springframework.web.client.RestTemplate; 9 | 10 | /** 11 | * @author 翟永超 12 | * @create 2017/4/15. 13 | * @blog http://blog.didispace.com 14 | */ 15 | @RestController 16 | public class DcController { 17 | 18 | @Autowired 19 | LoadBalancerClient loadBalancerClient; 20 | @Autowired 21 | RestTemplate restTemplate; 22 | 23 | @GetMapping("/consumer") 24 | public String dc() { 25 | ServiceInstance serviceInstance = loadBalancerClient.choose("consul-client"); 26 | String url = "http://" + serviceInstance.getHost() + ":" + serviceInstance.getPort() + "/dc"; 27 | System.out.println(url); 28 | return restTemplate.getForObject(url, String.class); 29 | } 30 | 31 | } 32 | -------------------------------------------------------------------------------- /2-Dalston版教程示例/consul-consumer/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | spring.application.name=consul-consumer 2 | server.port=2101 3 | 4 | spring.cloud.consul.host=localhost 5 | spring.cloud.consul.port=8500 6 | 7 | logging.file=${spring.application.name}.log 8 | -------------------------------------------------------------------------------- /2-Dalston版教程示例/eureka-client/src/main/java/com/didispace/Application.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.springframework.boot.autoconfigure.SpringBootApplication; 4 | import org.springframework.boot.builder.SpringApplicationBuilder; 5 | import org.springframework.cloud.client.discovery.EnableDiscoveryClient; 6 | 7 | @EnableDiscoveryClient 8 | @SpringBootApplication 9 | public class Application { 10 | 11 | public static void main(String[] args) { 12 | new SpringApplicationBuilder(Application.class).web(true).run(args); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /2-Dalston版教程示例/eureka-client/src/main/java/com/didispace/DcController.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.springframework.beans.factory.annotation.Autowired; 4 | import org.springframework.cloud.client.discovery.DiscoveryClient; 5 | import org.springframework.stereotype.Controller; 6 | import org.springframework.web.bind.annotation.GetMapping; 7 | import org.springframework.web.bind.annotation.RestController; 8 | 9 | /** 10 | * @author 翟永超 11 | * @create 2017/4/15. 12 | * @blog http://blog.didispace.com 13 | */ 14 | @RestController 15 | public class DcController { 16 | 17 | @Autowired 18 | DiscoveryClient discoveryClient; 19 | 20 | @GetMapping("/dc") 21 | public String dc() { 22 | String services = "Services: " + discoveryClient.getServices(); 23 | System.out.println(services); 24 | return services; 25 | } 26 | 27 | } 28 | -------------------------------------------------------------------------------- /2-Dalston版教程示例/eureka-client/src/main/resources/application.properties: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SpringForAll/SpringCloud-Learning/d1d38ff996caa7ec51ada8e4c7ecbb8fa4fff001/2-Dalston版教程示例/eureka-client/src/main/resources/application.properties -------------------------------------------------------------------------------- /2-Dalston版教程示例/eureka-consumer-feign-hystrix/src/main/java/com/didispace/Application.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.springframework.boot.autoconfigure.SpringBootApplication; 4 | import org.springframework.boot.builder.SpringApplicationBuilder; 5 | import org.springframework.cloud.client.discovery.EnableDiscoveryClient; 6 | import org.springframework.cloud.netflix.feign.EnableFeignClients; 7 | 8 | @EnableFeignClients 9 | @EnableDiscoveryClient 10 | @SpringBootApplication 11 | public class Application { 12 | 13 | public static void main(String[] args) { 14 | new SpringApplicationBuilder(Application.class).web(true).run(args); 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /2-Dalston版教程示例/eureka-consumer-feign-hystrix/src/main/java/com/didispace/DcClient.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.springframework.cloud.netflix.feign.FeignClient; 4 | import org.springframework.web.bind.annotation.GetMapping; 5 | 6 | /** 7 | * @author 翟永超 8 | * @create 2017/6/24. 9 | * @blog http://blog.didispace.com 10 | */ 11 | @FeignClient(name = "eureka-client", fallback = DcClientFallback.class) 12 | public interface DcClient { 13 | 14 | @GetMapping("/dc") 15 | String consumer(); 16 | 17 | } 18 | -------------------------------------------------------------------------------- /2-Dalston版教程示例/eureka-consumer-feign-hystrix/src/main/java/com/didispace/DcClientFallback.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.springframework.stereotype.Component; 4 | 5 | /** 6 | * @author 翟永超 7 | * @create 2017/6/24. 8 | * @blog http://blog.didispace.com 9 | */ 10 | @Component 11 | public class DcClientFallback implements DcClient { 12 | 13 | @Override 14 | public String consumer() { 15 | return "fallback"; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /2-Dalston版教程示例/eureka-consumer-feign-hystrix/src/main/java/com/didispace/DcController.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.springframework.beans.factory.annotation.Autowired; 4 | import org.springframework.web.bind.annotation.GetMapping; 5 | import org.springframework.web.bind.annotation.RestController; 6 | 7 | /** 8 | * @author 翟永超 9 | * @create 2017/4/15. 10 | * @blog http://blog.didispace.com 11 | */ 12 | @RestController 13 | public class DcController { 14 | 15 | @Autowired 16 | DcClient dcClient; 17 | 18 | @GetMapping("/consumer") 19 | public String dc() { 20 | return dcClient.consumer(); 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /2-Dalston版教程示例/eureka-consumer-feign-hystrix/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | spring.application.name=eureka-consumer 2 | server.port=2101 3 | 4 | eureka.client.serviceUrl.defaultZone=http://localhost:1001/eureka/ 5 | 6 | feign.hystrix.enabled=true 7 | 8 | logging.file=${spring.application.name}.log 9 | -------------------------------------------------------------------------------- /2-Dalston版教程示例/eureka-consumer-feign/src/main/java/com/didispace/Application.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.springframework.boot.autoconfigure.SpringBootApplication; 4 | import org.springframework.boot.builder.SpringApplicationBuilder; 5 | import org.springframework.cloud.client.discovery.EnableDiscoveryClient; 6 | import org.springframework.cloud.netflix.feign.EnableFeignClients; 7 | 8 | @EnableFeignClients 9 | @EnableDiscoveryClient 10 | @SpringBootApplication 11 | public class Application { 12 | 13 | public static void main(String[] args) { 14 | new SpringApplicationBuilder(Application.class).web(true).run(args); 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /2-Dalston版教程示例/eureka-consumer-feign/src/main/java/com/didispace/DcClient.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.springframework.cloud.netflix.feign.FeignClient; 4 | import org.springframework.web.bind.annotation.GetMapping; 5 | 6 | /** 7 | * @author 翟永超 8 | * @create 2017/6/24. 9 | * @blog http://blog.didispace.com 10 | */ 11 | @FeignClient("eureka-client") 12 | public interface DcClient { 13 | 14 | @GetMapping("/dc") 15 | String consumer(); 16 | 17 | } 18 | -------------------------------------------------------------------------------- /2-Dalston版教程示例/eureka-consumer-feign/src/main/java/com/didispace/DcController.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.springframework.beans.factory.annotation.Autowired; 4 | import org.springframework.web.bind.annotation.GetMapping; 5 | import org.springframework.web.bind.annotation.RestController; 6 | 7 | /** 8 | * @author 翟永超 9 | * @create 2017/4/15. 10 | * @blog http://blog.didispace.com 11 | */ 12 | @RestController 13 | public class DcController { 14 | 15 | @Autowired 16 | DcClient dcClient; 17 | 18 | @GetMapping("/consumer") 19 | public String dc() { 20 | return dcClient.consumer(); 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /2-Dalston版教程示例/eureka-consumer-feign/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | spring.application.name=eureka-consumer 2 | server.port=2101 3 | 4 | eureka.client.serviceUrl.defaultZone=http://localhost:1001/eureka/ 5 | 6 | logging.file=${spring.application.name}.log 7 | -------------------------------------------------------------------------------- /2-Dalston版教程示例/eureka-consumer-ribbon-hystrix/src/main/java/com/didispace/Application.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.springframework.boot.autoconfigure.SpringBootApplication; 4 | import org.springframework.boot.builder.SpringApplicationBuilder; 5 | import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker; 6 | import org.springframework.cloud.client.discovery.EnableDiscoveryClient; 7 | import org.springframework.cloud.client.loadbalancer.LoadBalanced; 8 | import org.springframework.cloud.netflix.hystrix.EnableHystrix; 9 | import org.springframework.context.annotation.Bean; 10 | import org.springframework.web.client.RestTemplate; 11 | 12 | @EnableCircuitBreaker 13 | @EnableDiscoveryClient 14 | @SpringBootApplication 15 | public class Application { 16 | 17 | @Bean 18 | @LoadBalanced 19 | public RestTemplate restTemplate() { 20 | return new RestTemplate(); 21 | } 22 | 23 | public static void main(String[] args) { 24 | new SpringApplicationBuilder(Application.class).web(true).run(args); 25 | } 26 | 27 | } 28 | -------------------------------------------------------------------------------- /2-Dalston版教程示例/eureka-consumer-ribbon-hystrix/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | spring.application.name=eureka-consumer-ribbon-hystrix 2 | server.port=2101 3 | 4 | eureka.client.serviceUrl.defaultZone=http://localhost:1001/eureka/ 5 | 6 | logging.file=${spring.application.name}.log 7 | -------------------------------------------------------------------------------- /2-Dalston版教程示例/eureka-consumer-ribbon/src/main/java/com/didispace/Application.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.springframework.boot.autoconfigure.SpringBootApplication; 4 | import org.springframework.boot.builder.SpringApplicationBuilder; 5 | import org.springframework.cloud.client.discovery.EnableDiscoveryClient; 6 | import org.springframework.cloud.client.loadbalancer.LoadBalanced; 7 | import org.springframework.context.annotation.Bean; 8 | import org.springframework.web.client.RestTemplate; 9 | 10 | @EnableDiscoveryClient 11 | @SpringBootApplication 12 | public class Application { 13 | 14 | @Bean 15 | @LoadBalanced 16 | public RestTemplate restTemplate() { 17 | return new RestTemplate(); 18 | } 19 | 20 | public static void main(String[] args) { 21 | new SpringApplicationBuilder(Application.class).web(true).run(args); 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /2-Dalston版教程示例/eureka-consumer-ribbon/src/main/java/com/didispace/DcController.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.springframework.beans.factory.annotation.Autowired; 4 | import org.springframework.web.bind.annotation.GetMapping; 5 | import org.springframework.web.bind.annotation.RestController; 6 | import org.springframework.web.client.RestTemplate; 7 | 8 | /** 9 | * @author 翟永超 10 | * @create 2017/4/15. 11 | * @blog http://blog.didispace.com 12 | */ 13 | @RestController 14 | public class DcController { 15 | 16 | @Autowired 17 | RestTemplate restTemplate; 18 | 19 | @GetMapping("/consumer") 20 | public String dc() { 21 | return restTemplate.getForObject("http://eureka-client/dc", String.class); 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /2-Dalston版教程示例/eureka-consumer-ribbon/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | spring.application.name=eureka-consumer 2 | server.port=2101 3 | 4 | eureka.client.serviceUrl.defaultZone=http://localhost:1001/eureka/ 5 | 6 | logging.file=${spring.application.name}.log 7 | -------------------------------------------------------------------------------- /2-Dalston版教程示例/eureka-consumer/src/main/java/com/didispace/Application.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.springframework.boot.autoconfigure.SpringBootApplication; 4 | import org.springframework.boot.builder.SpringApplicationBuilder; 5 | import org.springframework.cloud.client.discovery.EnableDiscoveryClient; 6 | import org.springframework.context.annotation.Bean; 7 | import org.springframework.web.client.RestTemplate; 8 | 9 | @EnableDiscoveryClient 10 | @SpringBootApplication 11 | public class Application { 12 | 13 | @Bean 14 | public RestTemplate restTemplate() { 15 | return new RestTemplate(); 16 | } 17 | 18 | public static void main(String[] args) { 19 | new SpringApplicationBuilder(Application.class).web(true).run(args); 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /2-Dalston版教程示例/eureka-consumer/src/main/java/com/didispace/DcController.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.springframework.beans.factory.annotation.Autowired; 4 | import org.springframework.cloud.client.ServiceInstance; 5 | import org.springframework.cloud.client.loadbalancer.LoadBalancerClient; 6 | import org.springframework.web.bind.annotation.GetMapping; 7 | import org.springframework.web.bind.annotation.RestController; 8 | import org.springframework.web.client.RestTemplate; 9 | 10 | /** 11 | * @author 翟永超 12 | * @create 2017/4/15. 13 | * @blog http://blog.didispace.com 14 | */ 15 | @RestController 16 | public class DcController { 17 | 18 | @Autowired 19 | LoadBalancerClient loadBalancerClient; 20 | @Autowired 21 | RestTemplate restTemplate; 22 | 23 | @GetMapping("/consumer") 24 | public String dc() { 25 | ServiceInstance serviceInstance = loadBalancerClient.choose("eureka-client"); 26 | String url = "http://" + serviceInstance.getHost() + ":" + serviceInstance.getPort() + "/dc"; 27 | System.out.println(url); 28 | return restTemplate.getForObject(url, String.class); 29 | } 30 | 31 | } 32 | -------------------------------------------------------------------------------- /2-Dalston版教程示例/eureka-consumer/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | spring.application.name=eureka-consumer 2 | server.port=2101 3 | 4 | eureka.client.serviceUrl.defaultZone=http://localhost:1001/eureka/ 5 | 6 | logging.file=${spring.application.name}.log 7 | -------------------------------------------------------------------------------- /2-Dalston版教程示例/eureka-feign-api/src/main/java/com/didispace/api/HelloService.java: -------------------------------------------------------------------------------- 1 | package com.didispace.api; 2 | 3 | import org.springframework.web.bind.annotation.GetMapping; 4 | import org.springframework.web.bind.annotation.RequestParam; 5 | 6 | /** 7 | * @author 翟永超 8 | * @create 2017/8/8. 9 | * @blog http://blog.didispace.com 10 | */ 11 | public interface HelloService { 12 | 13 | @GetMapping("/hello") 14 | String hello(@RequestParam(value = "name") String name); 15 | 16 | } 17 | -------------------------------------------------------------------------------- /2-Dalston版教程示例/eureka-feign-client/src/main/java/com/didispace/api/impl/Application.java: -------------------------------------------------------------------------------- 1 | package com.didispace.api.impl; 2 | 3 | import com.didispace.api.HelloService; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | import org.springframework.boot.builder.SpringApplicationBuilder; 6 | import org.springframework.cloud.client.discovery.EnableDiscoveryClient; 7 | import org.springframework.web.bind.annotation.RestController; 8 | 9 | @EnableDiscoveryClient 10 | @SpringBootApplication 11 | public class Application { 12 | 13 | @RestController 14 | class HelloController implements HelloService { 15 | 16 | @Override 17 | public String hello(String name) { 18 | return "hello " + name; 19 | } 20 | 21 | } 22 | 23 | public static void main(String[] args) { 24 | new SpringApplicationBuilder(Application.class).web(true).run(args); 25 | } 26 | 27 | } 28 | -------------------------------------------------------------------------------- /2-Dalston版教程示例/eureka-feign-client/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | spring.application.name=eureka-feign-client 2 | server.port=2101 3 | 4 | eureka.client.serviceUrl.defaultZone=http://eureka.didispace.com/eureka/ 5 | -------------------------------------------------------------------------------- /2-Dalston版教程示例/eureka-feign-consumer/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | spring.application.name=eureka-feign-consumer 2 | server.port=2102 3 | 4 | eureka.client.serviceUrl.defaultZone=http://eureka.didispace.com/eureka/ 5 | -------------------------------------------------------------------------------- /2-Dalston版教程示例/eureka-server/src/main/java/com/didispace/Application.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.springframework.boot.autoconfigure.SpringBootApplication; 4 | import org.springframework.boot.builder.SpringApplicationBuilder; 5 | import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; 6 | 7 | @EnableEurekaServer 8 | @SpringBootApplication 9 | public class Application { 10 | 11 | public static void main(String[] args) { 12 | new SpringApplicationBuilder(Application.class).web(true).run(args); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /2-Dalston版教程示例/eureka-server/src/main/resources/application-peer1.properties: -------------------------------------------------------------------------------- 1 | spring.application.name=eureka-server 2 | server.port=1001 3 | 4 | eureka.instance.hostname=peer1 5 | eureka.client.serviceUrl.defaultZone=http://peer2:1002/eureka/ 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /2-Dalston版教程示例/eureka-server/src/main/resources/application-peer2.properties: -------------------------------------------------------------------------------- 1 | spring.application.name=eureka-server 2 | server.port=1002 3 | 4 | eureka.instance.hostname=peer2 5 | eureka.client.serviceUrl.defaultZone=http://peer1:1001/eureka/ 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /2-Dalston版教程示例/eureka-server/src/main/resources/application.properties: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SpringForAll/SpringCloud-Learning/d1d38ff996caa7ec51ada8e4c7ecbb8fa4fff001/2-Dalston版教程示例/eureka-server/src/main/resources/application.properties -------------------------------------------------------------------------------- /2-Dalston版教程示例/hystrix-collapser-consumer/src/main/java/com/didispace/Application.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.springframework.boot.autoconfigure.SpringBootApplication; 4 | import org.springframework.boot.builder.SpringApplicationBuilder; 5 | import org.springframework.cloud.client.discovery.EnableDiscoveryClient; 6 | import org.springframework.cloud.client.loadbalancer.LoadBalanced; 7 | import org.springframework.cloud.netflix.hystrix.EnableHystrix; 8 | import org.springframework.context.annotation.Bean; 9 | import org.springframework.web.client.RestTemplate; 10 | 11 | @EnableHystrix 12 | @EnableDiscoveryClient 13 | @SpringBootApplication 14 | public class Application { 15 | 16 | @Bean 17 | @LoadBalanced 18 | public RestTemplate restTemplate() { 19 | return new RestTemplate(); 20 | } 21 | 22 | public static void main(String[] args) { 23 | new SpringApplicationBuilder(Application.class).web(true).run(args); 24 | } 25 | 26 | } 27 | -------------------------------------------------------------------------------- /2-Dalston版教程示例/hystrix-collapser-consumer/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | spring.application.name=hystrix-collapser-consumer 2 | server.port=2002 3 | 4 | eureka.client.serviceUrl.defaultZone=http://localhost:1001/eureka/ 5 | 6 | 7 | -------------------------------------------------------------------------------- /2-Dalston版教程示例/hystrix-collapser-provider/src/main/java/com/didispace/Application.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.springframework.boot.autoconfigure.SpringBootApplication; 4 | import org.springframework.boot.builder.SpringApplicationBuilder; 5 | import org.springframework.cloud.client.discovery.EnableDiscoveryClient; 6 | 7 | @EnableDiscoveryClient 8 | @SpringBootApplication 9 | public class Application { 10 | 11 | public static void main(String[] args) { 12 | new SpringApplicationBuilder(Application.class).web(true).run(args); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /2-Dalston版教程示例/hystrix-collapser-provider/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | spring.application.name=hystrix-collapser-provider 2 | server.port=2001 3 | 4 | eureka.client.serviceUrl.defaultZone=http://localhost:1001/eureka/ 5 | 6 | 7 | -------------------------------------------------------------------------------- /2-Dalston版教程示例/hystrix-dashboard/src/main/java/com/didispace/HystrixDashboardApplication.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.cloud.client.SpringCloudApplication; 5 | import org.springframework.cloud.netflix.hystrix.dashboard.EnableHystrixDashboard; 6 | 7 | @EnableHystrixDashboard 8 | @SpringCloudApplication 9 | public class HystrixDashboardApplication { 10 | 11 | public static void main(String[] args) { 12 | SpringApplication.run(HystrixDashboardApplication.class, args); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /2-Dalston版教程示例/hystrix-dashboard/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | spring.application.name=hystrix-dashboard 2 | server.port=1301 -------------------------------------------------------------------------------- /2-Dalston版教程示例/turbine-amqp/src/main/java/com/didispace/TurbineApplication.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.EnableAutoConfiguration; 5 | import org.springframework.cloud.client.discovery.EnableDiscoveryClient; 6 | import org.springframework.cloud.netflix.turbine.stream.EnableTurbineStream; 7 | import org.springframework.context.annotation.Configuration; 8 | 9 | @Configuration 10 | @EnableAutoConfiguration 11 | @EnableTurbineStream 12 | @EnableDiscoveryClient 13 | public class TurbineApplication { 14 | 15 | public static void main(String[] args) { 16 | SpringApplication.run(TurbineApplication.class, args); 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /2-Dalston版教程示例/turbine-amqp/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | spring.application.name=turbine-amqp 2 | 3 | server.port=8989 4 | management.port=8990 5 | 6 | eureka.client.serviceUrl.defaultZone=http://localhost:1001/eureka/ -------------------------------------------------------------------------------- /2-Dalston版教程示例/turbine/src/main/java/com/didispace/TurbineApplication.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.EnableAutoConfiguration; 5 | import org.springframework.cloud.client.discovery.EnableDiscoveryClient; 6 | import org.springframework.cloud.netflix.turbine.EnableTurbine; 7 | import org.springframework.context.annotation.Configuration; 8 | 9 | @Configuration 10 | @EnableAutoConfiguration 11 | @EnableTurbine 12 | @EnableDiscoveryClient 13 | public class TurbineApplication { 14 | 15 | public static void main(String[] args) { 16 | SpringApplication.run(TurbineApplication.class, args); 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /2-Dalston版教程示例/turbine/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | spring.application.name=turbine 2 | 3 | server.port=8989 4 | management.port=8990 5 | 6 | eureka.client.serviceUrl.defaultZone=http://localhost:1001/eureka/ 7 | 8 | turbine.app-config=eureka-consumer-ribbon-hystrix 9 | turbine.cluster-name-expression="default" 10 | turbine.combine-host-port=true -------------------------------------------------------------------------------- /Chapter1-1-1/compute-service/src/main/java/com/didispace/ComputeServiceApplication.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.springframework.boot.autoconfigure.SpringBootApplication; 4 | import org.springframework.boot.builder.SpringApplicationBuilder; 5 | import org.springframework.cloud.client.discovery.EnableDiscoveryClient; 6 | 7 | @EnableDiscoveryClient 8 | @SpringBootApplication 9 | public class ComputeServiceApplication { 10 | 11 | public static void main(String[] args) { 12 | new SpringApplicationBuilder(ComputeServiceApplication.class).web(true).run(args); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /Chapter1-1-1/compute-service/src/main/java/com/didispace/web/ComputeController.java: -------------------------------------------------------------------------------- 1 | package com.didispace.web; 2 | 3 | import org.apache.log4j.Logger; 4 | import org.springframework.beans.factory.annotation.Autowired; 5 | import org.springframework.cloud.client.ServiceInstance; 6 | import org.springframework.cloud.client.discovery.DiscoveryClient; 7 | import org.springframework.web.bind.annotation.RequestMapping; 8 | import org.springframework.web.bind.annotation.RequestMethod; 9 | import org.springframework.web.bind.annotation.RequestParam; 10 | import org.springframework.web.bind.annotation.RestController; 11 | 12 | @RestController 13 | public class ComputeController { 14 | 15 | private final Logger logger = Logger.getLogger(getClass()); 16 | 17 | @Autowired 18 | private DiscoveryClient client; 19 | 20 | @RequestMapping(value = "/add" ,method = RequestMethod.GET) 21 | public Integer add(@RequestParam Integer a, @RequestParam Integer b) { 22 | ServiceInstance instance = client.getLocalServiceInstance(); 23 | Integer r = a + b; 24 | logger.info("/add, host:" + instance.getHost() + ", service_id:" + instance.getServiceId() + ", result:" + r); 25 | return r; 26 | } 27 | 28 | } -------------------------------------------------------------------------------- /Chapter1-1-1/compute-service/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | spring.application.name=compute-service 2 | 3 | server.port=2222 4 | 5 | eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/ 6 | 7 | -------------------------------------------------------------------------------- /Chapter1-1-1/eureka-server/src/main/java/com/didispace/Application.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.springframework.boot.autoconfigure.SpringBootApplication; 4 | import org.springframework.boot.builder.SpringApplicationBuilder; 5 | import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; 6 | 7 | @EnableEurekaServer 8 | @SpringBootApplication 9 | public class Application { 10 | 11 | public static void main(String[] args) { 12 | new SpringApplicationBuilder(Application.class).web(true).run(args); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /Chapter1-1-1/eureka-server/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | server.port=1111 2 | #eureka.instance.hostname=localhost 3 | 4 | eureka.client.register-with-eureka=false 5 | eureka.client.fetch-registry=false 6 | eureka.client.serviceUrl.defaultZone=http://localhost:${server.port}/eureka/ -------------------------------------------------------------------------------- /Chapter1-1-2/eureka-feign/src/main/java/com/didispace/FeignApplication.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | import org.springframework.cloud.client.discovery.EnableDiscoveryClient; 6 | import org.springframework.cloud.netflix.feign.EnableFeignClients; 7 | 8 | @SpringBootApplication 9 | @EnableDiscoveryClient 10 | @EnableFeignClients 11 | public class FeignApplication { 12 | 13 | public static void main(String[] args) { 14 | SpringApplication.run(FeignApplication.class, args); 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /Chapter1-1-2/eureka-feign/src/main/java/com/didispace/service/ComputeClient.java: -------------------------------------------------------------------------------- 1 | package com.didispace.service; 2 | 3 | import org.springframework.cloud.netflix.feign.FeignClient; 4 | import org.springframework.web.bind.annotation.RequestMapping; 5 | import org.springframework.web.bind.annotation.RequestMethod; 6 | import org.springframework.web.bind.annotation.RequestParam; 7 | 8 | @FeignClient("compute-service") 9 | public interface ComputeClient { 10 | 11 | @RequestMapping(method = RequestMethod.GET, value = "/add") 12 | Integer add(@RequestParam(value = "a") Integer a, @RequestParam(value = "b") Integer b); 13 | 14 | } -------------------------------------------------------------------------------- /Chapter1-1-2/eureka-feign/src/main/java/com/didispace/web/ConsumerController.java: -------------------------------------------------------------------------------- 1 | package com.didispace.web; 2 | 3 | import com.didispace.service.ComputeClient; 4 | import org.springframework.beans.factory.annotation.Autowired; 5 | import org.springframework.web.bind.annotation.RequestMapping; 6 | import org.springframework.web.bind.annotation.RequestMethod; 7 | import org.springframework.web.bind.annotation.RestController; 8 | 9 | @RestController 10 | public class ConsumerController { 11 | 12 | @Autowired 13 | ComputeClient computeClient; 14 | 15 | @RequestMapping(value = "/add", method = RequestMethod.GET) 16 | public Integer add() { 17 | return computeClient.add(10, 20); 18 | } 19 | 20 | } -------------------------------------------------------------------------------- /Chapter1-1-2/eureka-feign/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | spring.application.name=feign-consumer 2 | server.port=3333 3 | 4 | eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/ 5 | 6 | -------------------------------------------------------------------------------- /Chapter1-1-2/eureka-ribbon/src/main/java/com/didispace/RibbonApplication.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | import org.springframework.cloud.client.discovery.EnableDiscoveryClient; 6 | import org.springframework.cloud.client.loadbalancer.LoadBalanced; 7 | import org.springframework.context.annotation.Bean; 8 | import org.springframework.web.client.RestTemplate; 9 | 10 | @SpringBootApplication 11 | @EnableDiscoveryClient 12 | public class RibbonApplication { 13 | 14 | @Bean 15 | @LoadBalanced 16 | RestTemplate restTemplate() { 17 | return new RestTemplate(); 18 | } 19 | 20 | public static void main(String[] args) { 21 | SpringApplication.run(RibbonApplication.class, args); 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /Chapter1-1-2/eureka-ribbon/src/main/java/com/didispace/web/ConsumerController.java: -------------------------------------------------------------------------------- 1 | package com.didispace.web; 2 | 3 | import org.springframework.beans.factory.annotation.Autowired; 4 | import org.springframework.web.bind.annotation.RequestMapping; 5 | import org.springframework.web.bind.annotation.RequestMethod; 6 | import org.springframework.web.bind.annotation.RestController; 7 | import org.springframework.web.client.RestTemplate; 8 | 9 | @RestController 10 | public class ConsumerController { 11 | 12 | @Autowired 13 | RestTemplate restTemplate; 14 | 15 | @RequestMapping(value = "/add", method = RequestMethod.GET) 16 | public String add() { 17 | return restTemplate.getForEntity("http://COMPUTE-SERVICE/add?a=10&b=20", String.class).getBody(); 18 | } 19 | 20 | 21 | } -------------------------------------------------------------------------------- /Chapter1-1-2/eureka-ribbon/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | spring.application.name=ribbon-consumer 2 | server.port=3333 3 | 4 | eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/ 5 | 6 | -------------------------------------------------------------------------------- /Chapter1-1-3/compute-service/src/main/java/com/didispace/ComputeServiceApplication.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.springframework.boot.autoconfigure.SpringBootApplication; 4 | import org.springframework.boot.builder.SpringApplicationBuilder; 5 | import org.springframework.cloud.client.discovery.EnableDiscoveryClient; 6 | 7 | @EnableDiscoveryClient 8 | @SpringBootApplication 9 | public class ComputeServiceApplication { 10 | 11 | public static void main(String[] args) { 12 | new SpringApplicationBuilder(ComputeServiceApplication.class).web(true).run(args); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /Chapter1-1-3/compute-service/src/main/java/com/didispace/web/ComputeController.java: -------------------------------------------------------------------------------- 1 | package com.didispace.web; 2 | 3 | import org.apache.log4j.Logger; 4 | import org.springframework.beans.factory.annotation.Autowired; 5 | import org.springframework.cloud.client.ServiceInstance; 6 | import org.springframework.cloud.client.discovery.DiscoveryClient; 7 | import org.springframework.web.bind.annotation.RequestMapping; 8 | import org.springframework.web.bind.annotation.RequestMethod; 9 | import org.springframework.web.bind.annotation.RequestParam; 10 | import org.springframework.web.bind.annotation.RestController; 11 | 12 | @RestController 13 | public class ComputeController { 14 | 15 | private final Logger logger = Logger.getLogger(getClass()); 16 | 17 | @Autowired 18 | private DiscoveryClient client; 19 | 20 | @RequestMapping(value = "/add" ,method = RequestMethod.GET) 21 | public Integer add(@RequestParam Integer a, @RequestParam Integer b) { 22 | ServiceInstance instance = client.getLocalServiceInstance(); 23 | Integer r = a + b; 24 | logger.info("/add, host:" + instance.getHost() + ", service_id:" + instance.getServiceId() + ", result:" + r); 25 | return r; 26 | } 27 | 28 | } -------------------------------------------------------------------------------- /Chapter1-1-3/compute-service/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | spring.application.name=compute-service 2 | 3 | server.port=2222 4 | 5 | eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/ 6 | 7 | -------------------------------------------------------------------------------- /Chapter1-1-3/eureka-feign/src/main/java/com/didispace/FeignApplication.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | import org.springframework.cloud.client.discovery.EnableDiscoveryClient; 6 | import org.springframework.cloud.netflix.feign.EnableFeignClients; 7 | 8 | @SpringBootApplication 9 | @EnableDiscoveryClient 10 | @EnableFeignClients 11 | public class FeignApplication { 12 | 13 | public static void main(String[] args) { 14 | SpringApplication.run(FeignApplication.class, args); 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /Chapter1-1-3/eureka-feign/src/main/java/com/didispace/service/ComputeClient.java: -------------------------------------------------------------------------------- 1 | package com.didispace.service; 2 | 3 | import org.springframework.cloud.netflix.feign.FeignClient; 4 | import org.springframework.web.bind.annotation.RequestMapping; 5 | import org.springframework.web.bind.annotation.RequestMethod; 6 | import org.springframework.web.bind.annotation.RequestParam; 7 | 8 | @FeignClient(value = "compute-service", fallback = ComputeClientHystrix.class) 9 | public interface ComputeClient { 10 | 11 | @RequestMapping(method = RequestMethod.GET, value = "/add") 12 | Integer add(@RequestParam(value = "a") Integer a, @RequestParam(value = "b") Integer b); 13 | 14 | } -------------------------------------------------------------------------------- /Chapter1-1-3/eureka-feign/src/main/java/com/didispace/service/ComputeClientHystrix.java: -------------------------------------------------------------------------------- 1 | package com.didispace.service; 2 | 3 | import org.springframework.stereotype.Component; 4 | import org.springframework.web.bind.annotation.RequestParam; 5 | 6 | @Component 7 | public class ComputeClientHystrix implements ComputeClient { 8 | 9 | @Override 10 | public Integer add(@RequestParam(value = "a") Integer a, @RequestParam(value = "b") Integer b) { 11 | return -9999; 12 | } 13 | 14 | } -------------------------------------------------------------------------------- /Chapter1-1-3/eureka-feign/src/main/java/com/didispace/web/ConsumerController.java: -------------------------------------------------------------------------------- 1 | package com.didispace.web; 2 | 3 | import com.didispace.service.ComputeClient; 4 | import org.springframework.beans.factory.annotation.Autowired; 5 | import org.springframework.web.bind.annotation.RequestMapping; 6 | import org.springframework.web.bind.annotation.RequestMethod; 7 | import org.springframework.web.bind.annotation.RestController; 8 | 9 | @RestController 10 | public class ConsumerController { 11 | 12 | @Autowired 13 | ComputeClient computeClient; 14 | 15 | @RequestMapping(value = "/add", method = RequestMethod.GET) 16 | public Integer add() { 17 | return computeClient.add(10, 20); 18 | } 19 | 20 | } -------------------------------------------------------------------------------- /Chapter1-1-3/eureka-ribbon/src/main/java/com/didispace/RibbonApplication.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker; 6 | import org.springframework.cloud.client.discovery.EnableDiscoveryClient; 7 | import org.springframework.cloud.client.loadbalancer.LoadBalanced; 8 | import org.springframework.context.annotation.Bean; 9 | import org.springframework.web.client.RestTemplate; 10 | 11 | @SpringBootApplication 12 | @EnableDiscoveryClient 13 | @EnableCircuitBreaker 14 | public class RibbonApplication { 15 | 16 | @Bean 17 | @LoadBalanced 18 | RestTemplate restTemplate() { 19 | return new RestTemplate(); 20 | } 21 | 22 | public static void main(String[] args) { 23 | SpringApplication.run(RibbonApplication.class, args); 24 | } 25 | 26 | } 27 | -------------------------------------------------------------------------------- /Chapter1-1-3/eureka-ribbon/src/main/java/com/didispace/service/ComputeService.java: -------------------------------------------------------------------------------- 1 | package com.didispace.service; 2 | 3 | import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand; 4 | import org.springframework.beans.factory.annotation.Autowired; 5 | import org.springframework.stereotype.Service; 6 | import org.springframework.web.client.RestTemplate; 7 | 8 | @Service 9 | public class ComputeService { 10 | 11 | @Autowired 12 | RestTemplate restTemplate; 13 | 14 | @HystrixCommand(fallbackMethod = "addServiceFallback") 15 | public String addService() { 16 | return restTemplate.getForEntity("http://COMPUTE-SERVICE/add?a=10&b=20", String.class).getBody(); 17 | } 18 | 19 | public String addServiceFallback() { 20 | return "error"; 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /Chapter1-1-3/eureka-ribbon/src/main/java/com/didispace/web/ConsumerController.java: -------------------------------------------------------------------------------- 1 | package com.didispace.web; 2 | 3 | import com.didispace.service.ComputeService; 4 | import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand; 5 | import org.springframework.beans.factory.annotation.Autowired; 6 | import org.springframework.web.bind.annotation.RequestMapping; 7 | import org.springframework.web.bind.annotation.RequestMethod; 8 | import org.springframework.web.bind.annotation.RestController; 9 | import org.springframework.web.client.RestTemplate; 10 | 11 | import java.util.Map; 12 | 13 | @RestController 14 | public class ConsumerController { 15 | 16 | @Autowired 17 | private ComputeService computeService; 18 | 19 | @RequestMapping(value = "/add", method = RequestMethod.GET) 20 | public String add() { 21 | return computeService.addService(); 22 | } 23 | 24 | } -------------------------------------------------------------------------------- /Chapter1-1-3/eureka-server/src/main/java/com/didispace/Application.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.springframework.boot.autoconfigure.SpringBootApplication; 4 | import org.springframework.boot.builder.SpringApplicationBuilder; 5 | import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; 6 | 7 | @EnableEurekaServer 8 | @SpringBootApplication 9 | public class Application { 10 | 11 | public static void main(String[] args) { 12 | new SpringApplicationBuilder(Application.class).web(true).run(args); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /Chapter1-1-3/eureka-server/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | server.port=1111 2 | #eureka.instance.hostname=localhost 3 | 4 | eureka.client.register-with-eureka=false 5 | eureka.client.fetch-registry=false 6 | eureka.client.serviceUrl.defaultZone=http://localhost:${server.port}/eureka/ -------------------------------------------------------------------------------- /Chapter1-1-4/config-client/src/main/java/com/didispace/Application.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.springframework.boot.autoconfigure.SpringBootApplication; 4 | import org.springframework.boot.builder.SpringApplicationBuilder; 5 | 6 | @SpringBootApplication 7 | public class Application { 8 | 9 | public static void main(String[] args) { 10 | new SpringApplicationBuilder(Application.class).web(true).run(args); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /Chapter1-1-4/config-client/src/main/java/com/didispace/web/TestController.java: -------------------------------------------------------------------------------- 1 | package com.didispace.web; 2 | 3 | import org.springframework.beans.factory.annotation.Value; 4 | import org.springframework.cloud.context.config.annotation.RefreshScope; 5 | import org.springframework.web.bind.annotation.RequestMapping; 6 | import org.springframework.web.bind.annotation.RestController; 7 | 8 | @RefreshScope 9 | @RestController 10 | class TestController { 11 | 12 | @Value("${from}") 13 | private String from; 14 | 15 | @RequestMapping("/from") 16 | public String from() { 17 | 18 | return this.from; 19 | } 20 | 21 | public void setFrom(String from) { 22 | this.from = from; 23 | } 24 | 25 | public String getFrom() { 26 | return from; 27 | } 28 | 29 | } -------------------------------------------------------------------------------- /Chapter1-1-4/config-client/src/main/resources/bootstrap.properties: -------------------------------------------------------------------------------- 1 | spring.application.name=didispace 2 | spring.cloud.config.profile=dev 3 | spring.cloud.config.uri=http://localhost:7001/ 4 | 5 | server.port=7002 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Chapter1-1-4/config-repo/didispace-dev.properties: -------------------------------------------------------------------------------- 1 | from=git-dev-1.0 -------------------------------------------------------------------------------- /Chapter1-1-4/config-repo/didispace-prod.properties: -------------------------------------------------------------------------------- 1 | from=git-prod-1.0 -------------------------------------------------------------------------------- /Chapter1-1-4/config-repo/didispace-test.properties: -------------------------------------------------------------------------------- 1 | from=git-test-1.0 -------------------------------------------------------------------------------- /Chapter1-1-4/config-repo/didispace.properties: -------------------------------------------------------------------------------- 1 | from=git-default-1.0 2 | -------------------------------------------------------------------------------- /Chapter1-1-4/config-server/src/main/java/com/didispace/Application.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.springframework.boot.autoconfigure.SpringBootApplication; 4 | import org.springframework.boot.builder.SpringApplicationBuilder; 5 | import org.springframework.cloud.config.server.EnableConfigServer; 6 | 7 | @EnableConfigServer 8 | @SpringBootApplication 9 | public class Application { 10 | 11 | public static void main(String[] args) { 12 | new SpringApplicationBuilder(Application.class).web(true).run(args); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /Chapter1-1-4/config-server/src/main/resources/application.properties: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SpringForAll/SpringCloud-Learning/d1d38ff996caa7ec51ada8e4c7ecbb8fa4fff001/Chapter1-1-4/config-server/src/main/resources/application.properties -------------------------------------------------------------------------------- /Chapter1-1-4/config-server/src/main/resources/didispace-dev.properties: -------------------------------------------------------------------------------- 1 | from=local-dev -------------------------------------------------------------------------------- /Chapter1-1-4/config-server/src/main/resources/didispace-prod.properties: -------------------------------------------------------------------------------- 1 | from=local-prod -------------------------------------------------------------------------------- /Chapter1-1-4/config-server/src/main/resources/didispace-test.properties: -------------------------------------------------------------------------------- 1 | from=local-test -------------------------------------------------------------------------------- /Chapter1-1-4/config-server/src/main/resources/didispace.properties: -------------------------------------------------------------------------------- 1 | from=local -------------------------------------------------------------------------------- /Chapter1-1-5/api-gateway/src/main/java/com/didispace/Application.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import com.didispace.filter.AccessFilter; 4 | import org.springframework.boot.builder.SpringApplicationBuilder; 5 | import org.springframework.cloud.client.SpringCloudApplication; 6 | import org.springframework.cloud.netflix.zuul.EnableZuulProxy; 7 | import org.springframework.context.annotation.Bean; 8 | 9 | @EnableZuulProxy 10 | @SpringCloudApplication 11 | public class Application { 12 | 13 | public static void main(String[] args) { 14 | new SpringApplicationBuilder(Application.class).web(true).run(args); 15 | } 16 | 17 | @Bean 18 | public AccessFilter accessFilter() { 19 | return new AccessFilter(); 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /Chapter1-1-5/api-gateway/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | spring.application.name=api-gateway 2 | server.port=5555 3 | 4 | # routes to serviceId 5 | zuul.routes.api-a.path=/api-a/** 6 | zuul.routes.api-a.serviceId=service-A 7 | 8 | zuul.routes.api-b.path=/api-b/** 9 | zuul.routes.api-b.serviceId=service-B 10 | 11 | # routes to url 12 | zuul.routes.api-a-url.path=/api-a-url/** 13 | zuul.routes.api-a-url.url=http://localhost:2222/ 14 | 15 | eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/ -------------------------------------------------------------------------------- /Chapter1-1-5/eureka-server/src/main/java/com/didispace/Application.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.springframework.boot.autoconfigure.SpringBootApplication; 4 | import org.springframework.boot.builder.SpringApplicationBuilder; 5 | import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; 6 | 7 | @EnableEurekaServer 8 | @SpringBootApplication 9 | public class Application { 10 | 11 | public static void main(String[] args) { 12 | new SpringApplicationBuilder(Application.class).web(true).run(args); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /Chapter1-1-5/eureka-server/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | server.port=1111 2 | #eureka.instance.hostname=localhost 3 | 4 | eureka.client.register-with-eureka=false 5 | eureka.client.fetch-registry=false 6 | eureka.client.serviceUrl.defaultZone=http://localhost:${server.port}/eureka/ -------------------------------------------------------------------------------- /Chapter1-1-5/service-A/src/main/java/com/didispace/ComputeServiceApplication.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.springframework.boot.autoconfigure.SpringBootApplication; 4 | import org.springframework.boot.builder.SpringApplicationBuilder; 5 | import org.springframework.cloud.client.discovery.EnableDiscoveryClient; 6 | 7 | @EnableDiscoveryClient 8 | @SpringBootApplication 9 | public class ComputeServiceApplication { 10 | 11 | public static void main(String[] args) { 12 | new SpringApplicationBuilder(ComputeServiceApplication.class).web(true).run(args); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /Chapter1-1-5/service-A/src/main/java/com/didispace/web/ComputeController.java: -------------------------------------------------------------------------------- 1 | package com.didispace.web; 2 | 3 | import org.apache.log4j.Logger; 4 | import org.springframework.beans.factory.annotation.Autowired; 5 | import org.springframework.cloud.client.ServiceInstance; 6 | import org.springframework.cloud.client.discovery.DiscoveryClient; 7 | import org.springframework.web.bind.annotation.RequestMapping; 8 | import org.springframework.web.bind.annotation.RequestMethod; 9 | import org.springframework.web.bind.annotation.RequestParam; 10 | import org.springframework.web.bind.annotation.RestController; 11 | 12 | @RestController 13 | public class ComputeController { 14 | 15 | private final Logger logger = Logger.getLogger(getClass()); 16 | 17 | @Autowired 18 | private DiscoveryClient client; 19 | 20 | @RequestMapping(value = "/add" ,method = RequestMethod.GET) 21 | public String add(@RequestParam Integer a, @RequestParam Integer b) { 22 | ServiceInstance instance = client.getLocalServiceInstance(); 23 | Integer r = a + b; 24 | logger.info("/add, host:" + instance.getHost() + ", service_id:" + instance.getServiceId() + ", result:" + r); 25 | return "From Service-A, Result is " + r; 26 | } 27 | 28 | } -------------------------------------------------------------------------------- /Chapter1-1-5/service-A/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | spring.application.name=service-A 2 | 3 | server.port=2222 4 | 5 | eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/ 6 | 7 | -------------------------------------------------------------------------------- /Chapter1-1-5/service-B/src/main/java/com/didispace/ComputeServiceApplication.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.springframework.boot.autoconfigure.SpringBootApplication; 4 | import org.springframework.boot.builder.SpringApplicationBuilder; 5 | import org.springframework.cloud.client.discovery.EnableDiscoveryClient; 6 | 7 | @EnableDiscoveryClient 8 | @SpringBootApplication 9 | public class ComputeServiceApplication { 10 | 11 | public static void main(String[] args) { 12 | new SpringApplicationBuilder(ComputeServiceApplication.class).web(true).run(args); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /Chapter1-1-5/service-B/src/main/java/com/didispace/web/ComputeController.java: -------------------------------------------------------------------------------- 1 | package com.didispace.web; 2 | 3 | import org.apache.log4j.Logger; 4 | import org.springframework.beans.factory.annotation.Autowired; 5 | import org.springframework.cloud.client.ServiceInstance; 6 | import org.springframework.cloud.client.discovery.DiscoveryClient; 7 | import org.springframework.web.bind.annotation.RequestMapping; 8 | import org.springframework.web.bind.annotation.RequestMethod; 9 | import org.springframework.web.bind.annotation.RequestParam; 10 | import org.springframework.web.bind.annotation.RestController; 11 | 12 | @RestController 13 | public class ComputeController { 14 | 15 | private final Logger logger = Logger.getLogger(getClass()); 16 | 17 | @Autowired 18 | private DiscoveryClient client; 19 | 20 | @RequestMapping(value = "/add" ,method = RequestMethod.GET) 21 | public String add(@RequestParam Integer a, @RequestParam Integer b) { 22 | ServiceInstance instance = client.getLocalServiceInstance(); 23 | Integer r = a + b; 24 | logger.info("/add, host:" + instance.getHost() + ", service_id:" + instance.getServiceId() + ", result:" + r); 25 | return "From Service-B, Result is " + r; 26 | } 27 | 28 | } -------------------------------------------------------------------------------- /Chapter1-1-5/service-B/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | spring.application.name=service-B 2 | 3 | server.port=3333 4 | 5 | eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/ 6 | 7 | -------------------------------------------------------------------------------- /Chapter1-1-5/service-B/src/test/java/com/didispace/ApplicationTests.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import com.didispace.web.ComputeController; 4 | import org.junit.Before; 5 | import org.junit.Test; 6 | import org.junit.runner.RunWith; 7 | import org.springframework.boot.test.SpringApplicationConfiguration; 8 | import org.springframework.mock.web.MockServletContext; 9 | import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; 10 | import org.springframework.test.context.web.WebAppConfiguration; 11 | import org.springframework.test.web.servlet.MockMvc; 12 | import org.springframework.test.web.servlet.setup.MockMvcBuilders; 13 | 14 | 15 | @RunWith(SpringJUnit4ClassRunner.class) 16 | @SpringApplicationConfiguration(classes = MockServletContext.class) 17 | @WebAppConfiguration 18 | public class ApplicationTests { 19 | 20 | private MockMvc mvc; 21 | 22 | @Before 23 | public void setUp() throws Exception { 24 | mvc = MockMvcBuilders.standaloneSetup(new ComputeController()).build(); 25 | } 26 | 27 | @Test 28 | public void getHello() throws Exception { 29 | } 30 | 31 | } 32 | -------------------------------------------------------------------------------- /Chapter1-1-6/compute-service/src/main/java/com/didispace/ComputeServiceApplication.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.springframework.boot.autoconfigure.SpringBootApplication; 4 | import org.springframework.boot.builder.SpringApplicationBuilder; 5 | import org.springframework.cloud.client.discovery.EnableDiscoveryClient; 6 | 7 | @EnableDiscoveryClient 8 | @SpringBootApplication 9 | public class ComputeServiceApplication { 10 | 11 | public static void main(String[] args) { 12 | new SpringApplicationBuilder(ComputeServiceApplication.class).web(true).run(args); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /Chapter1-1-6/compute-service/src/main/java/com/didispace/web/ComputeController.java: -------------------------------------------------------------------------------- 1 | package com.didispace.web; 2 | 3 | import org.apache.log4j.Logger; 4 | import org.springframework.beans.factory.annotation.Autowired; 5 | import org.springframework.cloud.client.ServiceInstance; 6 | import org.springframework.cloud.client.discovery.DiscoveryClient; 7 | import org.springframework.web.bind.annotation.RequestMapping; 8 | import org.springframework.web.bind.annotation.RequestMethod; 9 | import org.springframework.web.bind.annotation.RequestParam; 10 | import org.springframework.web.bind.annotation.RestController; 11 | 12 | @RestController 13 | public class ComputeController { 14 | 15 | private final Logger logger = Logger.getLogger(getClass()); 16 | 17 | @Autowired 18 | private DiscoveryClient client; 19 | 20 | @RequestMapping(value = "/add" ,method = RequestMethod.GET) 21 | public Integer add(@RequestParam Integer a, @RequestParam Integer b) { 22 | ServiceInstance instance = client.getLocalServiceInstance(); 23 | Integer r = a + b; 24 | logger.info("/add, host:" + instance.getHost() + ", service_id:" + instance.getServiceId() + ", result:" + r); 25 | return r; 26 | } 27 | 28 | } -------------------------------------------------------------------------------- /Chapter1-1-6/compute-service/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | spring.application.name=compute-service 2 | 3 | server.port=2222 4 | 5 | eureka.client.serviceUrl.defaultZone=http://peer1:1111/eureka/,http://peer2:1112/eureka/ -------------------------------------------------------------------------------- /Chapter1-1-6/eureka-server/src/main/java/com/didispace/Application.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.springframework.boot.autoconfigure.SpringBootApplication; 4 | import org.springframework.boot.builder.SpringApplicationBuilder; 5 | import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; 6 | 7 | @EnableEurekaServer 8 | @SpringBootApplication 9 | public class Application { 10 | 11 | public static void main(String[] args) { 12 | new SpringApplicationBuilder(Application.class).web(true).run(args); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /Chapter1-1-6/eureka-server/src/main/resources/application-peer1.properties: -------------------------------------------------------------------------------- 1 | spring.application.name=eureka-server 2 | server.port=1111 3 | eureka.instance.hostname=peer1 4 | 5 | eureka.client.serviceUrl.defaultZone=http://peer2:1112/eureka/ -------------------------------------------------------------------------------- /Chapter1-1-6/eureka-server/src/main/resources/application-peer2.properties: -------------------------------------------------------------------------------- 1 | spring.application.name=eureka-server 2 | server.port=1112 3 | eureka.instance.hostname=peer2 4 | 5 | eureka.client.serviceUrl.defaultZone=http://peer1:1111/eureka/ -------------------------------------------------------------------------------- /Chapter1-1-7/config-client-eureka-kafka/src/main/java/com/didispace/Application.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.springframework.boot.autoconfigure.SpringBootApplication; 4 | import org.springframework.boot.builder.SpringApplicationBuilder; 5 | import org.springframework.cloud.client.discovery.EnableDiscoveryClient; 6 | 7 | @EnableDiscoveryClient 8 | @SpringBootApplication 9 | public class Application { 10 | 11 | public static void main(String[] args) { 12 | new SpringApplicationBuilder(Application.class).web(true).run(args); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /Chapter1-1-7/config-client-eureka-kafka/src/main/java/com/didispace/web/TestController.java: -------------------------------------------------------------------------------- 1 | package com.didispace.web; 2 | 3 | import org.springframework.beans.factory.annotation.Value; 4 | import org.springframework.cloud.context.config.annotation.RefreshScope; 5 | import org.springframework.web.bind.annotation.RequestMapping; 6 | import org.springframework.web.bind.annotation.RestController; 7 | 8 | @RefreshScope 9 | @RestController 10 | public class TestController { 11 | 12 | @Value("${from}") 13 | private String from; 14 | 15 | @RequestMapping("/from") 16 | public String from() { 17 | return this.from; 18 | } 19 | 20 | public void setFrom(String from) { 21 | this.from = from; 22 | } 23 | 24 | public String getFrom() { 25 | return from; 26 | } 27 | 28 | } -------------------------------------------------------------------------------- /Chapter1-1-7/config-client-eureka-kafka/src/main/resources/bootstrap.properties: -------------------------------------------------------------------------------- 1 | spring.application.name=didispace 2 | server.port=7002 3 | 4 | eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/ 5 | 6 | spring.cloud.config.discovery.enabled=true 7 | spring.cloud.config.discovery.serviceId=config-server 8 | spring.cloud.config.profile=dev 9 | 10 | spring.cloud.config.failFast=true 11 | 12 | #kafka 13 | spring.cloud.stream.kafka.binder.zk-nodes=localhost:2181 14 | spring.cloud.stream.kafka.binder.brokers=localhost:9092 15 | 16 | spring.cloud.bus.trace.enabled=true -------------------------------------------------------------------------------- /Chapter1-1-7/config-client-eureka/src/main/java/com/didispace/Application.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.springframework.boot.autoconfigure.SpringBootApplication; 4 | import org.springframework.boot.builder.SpringApplicationBuilder; 5 | import org.springframework.cloud.client.discovery.EnableDiscoveryClient; 6 | 7 | @EnableDiscoveryClient 8 | @SpringBootApplication 9 | public class Application { 10 | 11 | public static void main(String[] args) { 12 | new SpringApplicationBuilder(Application.class).web(true).run(args); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /Chapter1-1-7/config-client-eureka/src/main/java/com/didispace/web/TestController.java: -------------------------------------------------------------------------------- 1 | package com.didispace.web; 2 | 3 | import org.springframework.beans.factory.annotation.Value; 4 | import org.springframework.cloud.context.config.annotation.RefreshScope; 5 | import org.springframework.web.bind.annotation.RequestMapping; 6 | import org.springframework.web.bind.annotation.RestController; 7 | 8 | @RefreshScope 9 | @RestController 10 | public class TestController { 11 | 12 | @Value("${from}") 13 | private String from; 14 | 15 | @RequestMapping("/from") 16 | public String from() { 17 | return this.from; 18 | } 19 | 20 | public void setFrom(String from) { 21 | this.from = from; 22 | } 23 | 24 | public String getFrom() { 25 | return from; 26 | } 27 | 28 | } -------------------------------------------------------------------------------- /Chapter1-1-7/config-client-eureka/src/main/resources/bootstrap.properties: -------------------------------------------------------------------------------- 1 | spring.application.name=didispace 2 | server.port=7002 3 | 4 | eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/ 5 | 6 | spring.cloud.config.discovery.enabled=true 7 | spring.cloud.config.discovery.serviceId=config-server 8 | spring.cloud.config.profile=dev 9 | 10 | spring.cloud.config.failFast=true 11 | 12 | spring.rabbitmq.host=localhost 13 | spring.rabbitmq.port=5672 14 | spring.rabbitmq.username=springcloud 15 | spring.rabbitmq.password=123456 -------------------------------------------------------------------------------- /Chapter1-1-7/config-repo/didispace-dev.properties: -------------------------------------------------------------------------------- 1 | from=git-dev-3.0 -------------------------------------------------------------------------------- /Chapter1-1-7/config-repo/didispace-prod.properties: -------------------------------------------------------------------------------- 1 | from=git-prod-1.0 -------------------------------------------------------------------------------- /Chapter1-1-7/config-repo/didispace-test.properties: -------------------------------------------------------------------------------- 1 | from=git-test-1.0 -------------------------------------------------------------------------------- /Chapter1-1-7/config-repo/didispace.properties: -------------------------------------------------------------------------------- 1 | from=git-default-1.0 2 | -------------------------------------------------------------------------------- /Chapter1-1-7/config-server-eureka-kafka/src/main/java/com/didispace/Application.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.springframework.boot.autoconfigure.SpringBootApplication; 4 | import org.springframework.boot.builder.SpringApplicationBuilder; 5 | import org.springframework.cloud.client.discovery.EnableDiscoveryClient; 6 | import org.springframework.cloud.config.server.EnableConfigServer; 7 | 8 | @EnableDiscoveryClient 9 | @EnableConfigServer 10 | @SpringBootApplication 11 | public class Application { 12 | 13 | public static void main(String[] args) { 14 | new SpringApplicationBuilder(Application.class).web(true).run(args); 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /Chapter1-1-7/config-server-eureka-kafka/src/main/resources/application.properties: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SpringForAll/SpringCloud-Learning/d1d38ff996caa7ec51ada8e4c7ecbb8fa4fff001/Chapter1-1-7/config-server-eureka-kafka/src/main/resources/application.properties -------------------------------------------------------------------------------- /Chapter1-1-7/config-server-eureka-kafka/src/main/resources/didispace-dev.properties: -------------------------------------------------------------------------------- 1 | from=local-dev -------------------------------------------------------------------------------- /Chapter1-1-7/config-server-eureka-kafka/src/main/resources/didispace-prod.properties: -------------------------------------------------------------------------------- 1 | from=local-prod -------------------------------------------------------------------------------- /Chapter1-1-7/config-server-eureka-kafka/src/main/resources/didispace-test.properties: -------------------------------------------------------------------------------- 1 | from=local-test -------------------------------------------------------------------------------- /Chapter1-1-7/config-server-eureka-kafka/src/main/resources/didispace.properties: -------------------------------------------------------------------------------- 1 | from=local -------------------------------------------------------------------------------- /Chapter1-1-7/config-server-eureka/src/main/java/com/didispace/Application.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.springframework.boot.autoconfigure.SpringBootApplication; 4 | import org.springframework.boot.builder.SpringApplicationBuilder; 5 | import org.springframework.cloud.client.discovery.EnableDiscoveryClient; 6 | import org.springframework.cloud.config.server.EnableConfigServer; 7 | 8 | @EnableDiscoveryClient 9 | @EnableConfigServer 10 | @SpringBootApplication 11 | public class Application { 12 | 13 | public static void main(String[] args) { 14 | new SpringApplicationBuilder(Application.class).web(true).run(args); 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /Chapter1-1-7/config-server-eureka/src/main/resources/application.properties: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SpringForAll/SpringCloud-Learning/d1d38ff996caa7ec51ada8e4c7ecbb8fa4fff001/Chapter1-1-7/config-server-eureka/src/main/resources/application.properties -------------------------------------------------------------------------------- /Chapter1-1-7/config-server-eureka/src/main/resources/didispace-dev.properties: -------------------------------------------------------------------------------- 1 | from=local-dev -------------------------------------------------------------------------------- /Chapter1-1-7/config-server-eureka/src/main/resources/didispace-prod.properties: -------------------------------------------------------------------------------- 1 | from=local-prod -------------------------------------------------------------------------------- /Chapter1-1-7/config-server-eureka/src/main/resources/didispace-test.properties: -------------------------------------------------------------------------------- 1 | from=local-test -------------------------------------------------------------------------------- /Chapter1-1-7/config-server-eureka/src/main/resources/didispace.properties: -------------------------------------------------------------------------------- 1 | from=local -------------------------------------------------------------------------------- /Chapter1-1-8/config-client-eureka/src/main/java/com/didispace/Application.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.springframework.boot.autoconfigure.SpringBootApplication; 4 | import org.springframework.boot.builder.SpringApplicationBuilder; 5 | import org.springframework.cloud.client.discovery.EnableDiscoveryClient; 6 | 7 | @EnableDiscoveryClient 8 | @SpringBootApplication 9 | public class Application { 10 | 11 | public static void main(String[] args) { 12 | new SpringApplicationBuilder(Application.class).web(true).run(args); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /Chapter1-1-8/config-client-eureka/src/main/java/com/didispace/web/TestController.java: -------------------------------------------------------------------------------- 1 | package com.didispace.web; 2 | 3 | import org.springframework.beans.factory.annotation.Value; 4 | import org.springframework.cloud.context.config.annotation.RefreshScope; 5 | import org.springframework.web.bind.annotation.RequestMapping; 6 | import org.springframework.web.bind.annotation.RestController; 7 | 8 | @RefreshScope 9 | @RestController 10 | public class TestController { 11 | 12 | @Value("${from}") 13 | private String from; 14 | 15 | @RequestMapping("/from") 16 | public String from() { 17 | return this.from; 18 | } 19 | 20 | public void setFrom(String from) { 21 | this.from = from; 22 | } 23 | 24 | public String getFrom() { 25 | return from; 26 | } 27 | 28 | } -------------------------------------------------------------------------------- /Chapter1-1-8/config-client-eureka/src/main/resources/bootstrap.properties: -------------------------------------------------------------------------------- 1 | spring.application.name=didispace 2 | server.port=7002 3 | 4 | eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/ 5 | 6 | spring.cloud.config.discovery.enabled=true 7 | spring.cloud.config.discovery.serviceId=config-server 8 | spring.cloud.config.profile=dev 9 | 10 | spring.cloud.config.failFast=true -------------------------------------------------------------------------------- /Chapter1-1-8/config-repo/didispace-dev.properties: -------------------------------------------------------------------------------- 1 | from=git-dev-1.0 -------------------------------------------------------------------------------- /Chapter1-1-8/config-repo/didispace-prod.properties: -------------------------------------------------------------------------------- 1 | from=git-prod-1.0 -------------------------------------------------------------------------------- /Chapter1-1-8/config-repo/didispace-test.properties: -------------------------------------------------------------------------------- 1 | from=git-test-1.0 -------------------------------------------------------------------------------- /Chapter1-1-8/config-repo/didispace.properties: -------------------------------------------------------------------------------- 1 | from=git-default-1.0 2 | -------------------------------------------------------------------------------- /Chapter1-1-8/config-server-eureka/src/main/java/com/didispace/Application.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.springframework.boot.autoconfigure.SpringBootApplication; 4 | import org.springframework.boot.builder.SpringApplicationBuilder; 5 | import org.springframework.cloud.client.discovery.EnableDiscoveryClient; 6 | import org.springframework.cloud.config.server.EnableConfigServer; 7 | 8 | @EnableDiscoveryClient 9 | @EnableConfigServer 10 | @SpringBootApplication 11 | public class Application { 12 | 13 | public static void main(String[] args) { 14 | new SpringApplicationBuilder(Application.class).web(true).run(args); 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /Chapter1-1-8/config-server-eureka/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | spring.application.name=config-server 2 | server.port=7001 3 | 4 | eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/ 5 | 6 | # git¹ÜÀíÅäÖà 7 | spring.cloud.config.server.git.uri=http://git.oschina.net/didispace/SpringCloud-Learning/ 8 | spring.cloud.config.server.git.searchPaths=Chapter1-1-8/config-repo 9 | spring.cloud.config.server.git.username=username 10 | spring.cloud.config.server.git.password=password 11 | -------------------------------------------------------------------------------- /Chapter1-1-8/config-server-eureka/src/main/resources/didispace-dev.properties: -------------------------------------------------------------------------------- 1 | from=local-dev -------------------------------------------------------------------------------- /Chapter1-1-8/config-server-eureka/src/main/resources/didispace-prod.properties: -------------------------------------------------------------------------------- 1 | from=local-prod -------------------------------------------------------------------------------- /Chapter1-1-8/config-server-eureka/src/main/resources/didispace-test.properties: -------------------------------------------------------------------------------- 1 | from=local-test -------------------------------------------------------------------------------- /Chapter1-1-8/config-server-eureka/src/main/resources/didispace.properties: -------------------------------------------------------------------------------- 1 | from=local -------------------------------------------------------------------------------- /spring_cloud_in_action/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SpringForAll/SpringCloud-Learning/d1d38ff996caa7ec51ada8e4c7ecbb8fa4fff001/spring_cloud_in_action/README.md -------------------------------------------------------------------------------- /spring_cloud_in_action/api-gateway-consul/filter/post/PostFilter.groovy: -------------------------------------------------------------------------------- 1 | package com.didispace.filter.post 2 | 3 | import org.slf4j.Logger 4 | import org.slf4j.LoggerFactory 5 | 6 | import com.netflix.zuul.ZuulFilter 7 | 8 | class PostFilter extends ZuulFilter{ 9 | 10 | Logger log = LoggerFactory.getLogger(PostFilter.class); 11 | 12 | @Override 13 | String filterType() { 14 | return "post" 15 | } 16 | 17 | @Override 18 | int filterOrder() { 19 | return 2000 20 | } 21 | 22 | @Override 23 | boolean shouldFilter() { 24 | return true 25 | } 26 | 27 | @Override 28 | Object run() { 29 | log.info("this is a post filter aaaaaaa"); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /spring_cloud_in_action/api-gateway-consul/filter/pre/PreFilter.groovy: -------------------------------------------------------------------------------- 1 | package com.didispace.filter.pre 2 | 3 | import org.slf4j.Logger 4 | import org.slf4j.LoggerFactory; 5 | 6 | import javax.servlet.http.HttpServletRequest; 7 | 8 | import com.netflix.zuul.ZuulFilter; 9 | import com.netflix.zuul.context.RequestContext; 10 | 11 | class PreFilter extends ZuulFilter { 12 | 13 | Logger log = LoggerFactory.getLogger(PreFilter.class); 14 | 15 | @Override 16 | String filterType() { 17 | return "pre" 18 | } 19 | 20 | @Override 21 | int filterOrder() { 22 | return 1000 23 | } 24 | 25 | @Override 26 | boolean shouldFilter() { 27 | return true 28 | } 29 | 30 | @Override 31 | Object run() { 32 | log.info("this is a pre filter") 33 | HttpServletRequest request = RequestContext.getCurrentContext().getRequest() 34 | log.info(String.format("send %s request to %s", request.getMethod(), request.getRequestURL().toString())) 35 | return null 36 | } 37 | } -------------------------------------------------------------------------------- /spring_cloud_in_action/api-gateway-consul/src/main/java/com/didispace/Application.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import com.netflix.zuul.FilterFileManager; 4 | import com.netflix.zuul.FilterLoader; 5 | import com.netflix.zuul.groovy.GroovyCompiler; 6 | import com.netflix.zuul.groovy.GroovyFileFilter; 7 | import org.springframework.boot.builder.SpringApplicationBuilder; 8 | import org.springframework.cloud.client.SpringCloudApplication; 9 | import org.springframework.cloud.netflix.zuul.EnableZuulProxy; 10 | 11 | @EnableZuulProxy 12 | @SpringCloudApplication 13 | public class Application { 14 | 15 | public static void main(String[] args) { 16 | new SpringApplicationBuilder(Application.class).web(true).run(args); 17 | String zuulFilterRoot = "api-gateway-consul/filter"; 18 | FilterLoader.getInstance().setCompiler(new GroovyCompiler()); 19 | try { 20 | FilterFileManager.setFilenameFilter(new GroovyFileFilter()); 21 | FilterFileManager.init(5, 22 | zuulFilterRoot + "/pre", 23 | zuulFilterRoot + "/post"); 24 | } catch (Exception e) { 25 | throw new RuntimeException(e); 26 | } 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /spring_cloud_in_action/api-gateway-consul/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | spring.application.name=api-gateway-consul 2 | server.port=5555 3 | 4 | # routes to serviceId 5 | zuul.routes.api-a.path=/consul/** 6 | zuul.routes.api-a.serviceId=consul-client-1 7 | 8 | # routes to url 9 | zuul.routes.api-a-url.path=/api-a-url/** 10 | zuul.routes.api-a-url.url=http://localhost:8080/ 11 | 12 | spring.cloud.consul.host=localhost 13 | spring.cloud.consul.port=8500 -------------------------------------------------------------------------------- /spring_cloud_in_action/api-gateway-dynamic-filter/filter/post/PostFilter.groovy: -------------------------------------------------------------------------------- 1 | package com.didispace.filter.post 2 | 3 | import com.netflix.zuul.ZuulFilter 4 | import com.netflix.zuul.context.RequestContext 5 | import com.netflix.zuul.http.HttpServletResponseWrapper 6 | import org.slf4j.Logger 7 | import org.slf4j.LoggerFactory 8 | import org.springframework.cloud.netflix.zuul.util.RequestUtils 9 | 10 | import javax.servlet.http.HttpServletResponse 11 | 12 | class PostFilter extends ZuulFilter{ 13 | 14 | Logger log = LoggerFactory.getLogger(PostFilter.class) 15 | 16 | @Override 17 | String filterType() { 18 | return "post" 19 | } 20 | 21 | @Override 22 | int filterOrder() { 23 | return 2000 24 | } 25 | 26 | @Override 27 | boolean shouldFilter() { 28 | return true 29 | } 30 | 31 | @Override 32 | Object run() { 33 | log.info("debug request : {}", RequestContext.getCurrentContext().getBoolean("debugRequest")) 34 | log.info("this is a post filter: Receive response") 35 | HttpServletResponse response = RequestContext.getCurrentContext().getResponse() 36 | response.getOutputStream().print(", I am zhaiyongchao") 37 | response.flushBuffer() 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /spring_cloud_in_action/api-gateway-dynamic-filter/filter/pre/PreFilter.groovy: -------------------------------------------------------------------------------- 1 | package com.didispace.filter.pre 2 | 3 | import org.slf4j.Logger 4 | import org.slf4j.LoggerFactory; 5 | 6 | import javax.servlet.http.HttpServletRequest; 7 | 8 | import com.netflix.zuul.ZuulFilter; 9 | import com.netflix.zuul.context.RequestContext; 10 | 11 | class PreFilter extends ZuulFilter { 12 | 13 | Logger log = LoggerFactory.getLogger(PreFilter.class) 14 | 15 | @Override 16 | String filterType() { 17 | return "pre" 18 | } 19 | 20 | @Override 21 | int filterOrder() { 22 | return 1000 23 | } 24 | 25 | @Override 26 | boolean shouldFilter() { 27 | return true 28 | } 29 | 30 | @Override 31 | Object run() { 32 | HttpServletRequest request = RequestContext.getCurrentContext().getRequest() 33 | log.info("this is a pre filter: Send {} request to {}", request.getMethod(), request.getRequestURL().toString()) 34 | return null 35 | } 36 | 37 | } -------------------------------------------------------------------------------- /spring_cloud_in_action/api-gateway-dynamic-filter/src/main/java/com/didispace/FilterConfiguration.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.springframework.boot.context.properties.ConfigurationProperties; 4 | 5 | /** 6 | * @author 翟永超 7 | * @create 2016/12/11. 8 | * @blog http://blog.didispace.com 9 | */ 10 | @ConfigurationProperties("zuul.filter") 11 | public class FilterConfiguration { 12 | 13 | private String root; 14 | private Integer interval; 15 | 16 | public String getRoot() { 17 | return root; 18 | } 19 | 20 | public void setRoot(String root) { 21 | this.root = root; 22 | } 23 | 24 | public Integer getInterval() { 25 | return interval; 26 | } 27 | 28 | public void setInterval(Integer interval) { 29 | this.interval = interval; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /spring_cloud_in_action/api-gateway-dynamic-filter/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | spring.application.name=api-gateway 2 | server.port=5555 3 | 4 | eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/ 5 | 6 | zuul.filter.root=filter 7 | zuul.filter.interval=5 8 | 9 | #zuul.debug.request=true 10 | -------------------------------------------------------------------------------- /spring_cloud_in_action/api-gateway-dynamic-route/src/main/java/com/didispace/Application.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.springframework.boot.builder.SpringApplicationBuilder; 4 | import org.springframework.boot.context.properties.ConfigurationProperties; 5 | import org.springframework.cloud.client.SpringCloudApplication; 6 | import org.springframework.cloud.context.config.annotation.RefreshScope; 7 | import org.springframework.cloud.netflix.zuul.EnableZuulProxy; 8 | import org.springframework.cloud.netflix.zuul.filters.ZuulProperties; 9 | import org.springframework.context.annotation.Bean; 10 | 11 | @EnableZuulProxy 12 | @SpringCloudApplication 13 | public class Application { 14 | 15 | public static void main(String[] args) { 16 | new SpringApplicationBuilder(Application.class).web(true).run(args); 17 | } 18 | 19 | @Bean 20 | @RefreshScope 21 | @ConfigurationProperties("zuul") 22 | public ZuulProperties zuulProperties() { 23 | return new ZuulProperties(); 24 | } 25 | 26 | } 27 | -------------------------------------------------------------------------------- /spring_cloud_in_action/api-gateway-dynamic-route/src/main/resources/bootstrap.properties: -------------------------------------------------------------------------------- 1 | spring.application.name=api-gateway 2 | server.port=5556 3 | 4 | #spring.cloud.config.profile=dev 5 | spring.cloud.config.uri=http://localhost:7001/ 6 | 7 | eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/ -------------------------------------------------------------------------------- /spring_cloud_in_action/api-gateway-exception/src/main/java/com/didispace/Application.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import com.didispace.filter.DidiErrorAttributes; 4 | import com.didispace.filter.DidiFilterProcessor; 5 | import com.netflix.zuul.FilterProcessor; 6 | import org.springframework.boot.autoconfigure.web.DefaultErrorAttributes; 7 | import org.springframework.boot.builder.SpringApplicationBuilder; 8 | import org.springframework.cloud.client.SpringCloudApplication; 9 | import org.springframework.cloud.netflix.zuul.EnableZuulProxy; 10 | import org.springframework.context.annotation.Bean; 11 | 12 | @EnableZuulProxy 13 | @SpringCloudApplication 14 | public class Application { 15 | 16 | public static void main(String[] args) { 17 | FilterProcessor.setProcessor(new DidiFilterProcessor()); 18 | new SpringApplicationBuilder(Application.class).web(true).run(args); 19 | } 20 | 21 | @Bean 22 | public DefaultErrorAttributes errorAttributes() { 23 | return new DidiErrorAttributes(); 24 | } 25 | 26 | } 27 | -------------------------------------------------------------------------------- /spring_cloud_in_action/api-gateway-exception/src/main/java/com/didispace/filter/DidiErrorAttributes.java: -------------------------------------------------------------------------------- 1 | package com.didispace.filter; 2 | 3 | import org.springframework.boot.autoconfigure.web.DefaultErrorAttributes; 4 | import org.springframework.web.context.request.RequestAttributes; 5 | 6 | import java.util.Map; 7 | 8 | /** 9 | * @author 翟永超 10 | * @create 2016/12/15. 11 | * @blog http://blog.didispace.com 12 | */ 13 | public class DidiErrorAttributes extends DefaultErrorAttributes { 14 | 15 | @Override 16 | public Map getErrorAttributes ( 17 | RequestAttributes requestAttributes, boolean includeStackTrace){ 18 | Map result = super.getErrorAttributes(requestAttributes, includeStackTrace); 19 | result.remove("exception"); 20 | return result; 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /spring_cloud_in_action/api-gateway-exception/src/main/java/com/didispace/filter/DidiFilterProcessor.java: -------------------------------------------------------------------------------- 1 | package com.didispace.filter; 2 | 3 | import com.netflix.zuul.FilterProcessor; 4 | import com.netflix.zuul.ZuulFilter; 5 | import com.netflix.zuul.context.RequestContext; 6 | import com.netflix.zuul.exception.ZuulException; 7 | 8 | /** 9 | * @author 翟永超 10 | * @create 2016/12/15. 11 | * @blog http://blog.didispace.com 12 | */ 13 | public class DidiFilterProcessor extends FilterProcessor { 14 | 15 | @Override 16 | public Object processZuulFilter(ZuulFilter filter) throws ZuulException { 17 | try { 18 | return super.processZuulFilter(filter); 19 | } catch (ZuulException e) { 20 | RequestContext ctx = RequestContext.getCurrentContext(); 21 | ctx.set("failed.exception", e); 22 | ctx.set("failed.filter", filter); 23 | throw e; 24 | } 25 | } 26 | 27 | } 28 | -------------------------------------------------------------------------------- /spring_cloud_in_action/api-gateway-exception/src/main/java/com/didispace/filter/error/ErrorExtFilter.java: -------------------------------------------------------------------------------- 1 | package com.didispace.filter.error; 2 | 3 | import com.netflix.zuul.ZuulFilter; 4 | import com.netflix.zuul.context.RequestContext; 5 | import org.slf4j.Logger; 6 | import org.slf4j.LoggerFactory; 7 | import org.springframework.cloud.netflix.zuul.filters.post.SendErrorFilter; 8 | import org.springframework.stereotype.Component; 9 | 10 | /** 11 | * 从POST抛出的异常,使用该过滤器返回错误信息 12 | */ 13 | @Component 14 | public class ErrorExtFilter extends SendErrorFilter { 15 | 16 | Logger log = LoggerFactory.getLogger(ErrorExtFilter.class); 17 | 18 | @Override 19 | public String filterType() { 20 | return "error"; 21 | } 22 | 23 | @Override 24 | public int filterOrder() { 25 | return 30; 26 | } 27 | 28 | @Override 29 | public boolean shouldFilter() { 30 | RequestContext ctx = RequestContext.getCurrentContext(); 31 | ZuulFilter failedFilter = (ZuulFilter) ctx.get("failed.filter"); 32 | if(failedFilter != null && failedFilter.filterType().equals("post")) { 33 | return true; 34 | } 35 | return false; 36 | } 37 | 38 | } 39 | -------------------------------------------------------------------------------- /spring_cloud_in_action/api-gateway-exception/src/main/java/com/didispace/filter/post/ThrowExceptionPostFilter.java: -------------------------------------------------------------------------------- 1 | package com.didispace.filter.post; 2 | 3 | import com.netflix.zuul.ZuulFilter; 4 | import org.slf4j.Logger; 5 | import org.slf4j.LoggerFactory; 6 | import org.springframework.stereotype.Component; 7 | 8 | @Component 9 | public class ThrowExceptionPostFilter extends ZuulFilter { 10 | 11 | private static Logger log = LoggerFactory.getLogger(ThrowExceptionPostFilter.class); 12 | 13 | @Override 14 | public String filterType() { 15 | return "post"; 16 | } 17 | 18 | @Override 19 | public int filterOrder() { 20 | return 10; 21 | } 22 | 23 | @Override 24 | public boolean shouldFilter() { 25 | return true; 26 | } 27 | 28 | @Override 29 | public Object run() { 30 | log.info("This is a post filter, it will throw a RuntimeException"); 31 | doSomething(); 32 | return null; 33 | } 34 | 35 | private void doSomething() { 36 | throw new RuntimeException("Exist some errors..."); 37 | } 38 | 39 | } 40 | -------------------------------------------------------------------------------- /spring_cloud_in_action/api-gateway-exception/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | spring.application.name=api-gateway 2 | server.port=5555 3 | 4 | # eureka 5 | eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/ 6 | 7 | #zuul.ThrowExceptionFilter.pre.disable=true 8 | zuul.ThrowExceptionPostFilter.post.disable=true 9 | -------------------------------------------------------------------------------- /spring_cloud_in_action/api-gateway/src/main/java/com/didispace/Application.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import com.didispace.filter.AccessFilter; 4 | import org.springframework.boot.builder.SpringApplicationBuilder; 5 | import org.springframework.cloud.client.SpringCloudApplication; 6 | import org.springframework.cloud.netflix.zuul.EnableZuulProxy; 7 | import org.springframework.cloud.netflix.zuul.filters.discovery.PatternServiceRouteMapper; 8 | import org.springframework.context.annotation.Bean; 9 | 10 | @EnableZuulProxy 11 | @SpringCloudApplication 12 | public class Application { 13 | 14 | public static void main(String[] args) { 15 | new SpringApplicationBuilder(Application.class).web(true).run(args); 16 | } 17 | 18 | @Bean 19 | public AccessFilter accessFilter() { 20 | return new AccessFilter(); 21 | } 22 | 23 | @Bean 24 | public PatternServiceRouteMapper serviceRouteMapper() { 25 | return new PatternServiceRouteMapper( 26 | "(?^.+)-(?v.+$)", 27 | "${version}/${name}"); 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /spring_cloud_in_action/api-gateway/src/main/java/com/didispace/HelloController.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.springframework.web.bind.annotation.RequestMapping; 4 | import org.springframework.web.bind.annotation.RestController; 5 | 6 | 7 | @RestController 8 | public class HelloController { 9 | 10 | @RequestMapping("/local/hello") 11 | public String hello() { 12 | return "Hello World Local"; 13 | } 14 | 15 | } -------------------------------------------------------------------------------- /spring_cloud_in_action/api-gateway/src/main/resources/application.properties: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SpringForAll/SpringCloud-Learning/d1d38ff996caa7ec51ada8e4c7ecbb8fa4fff001/spring_cloud_in_action/api-gateway/src/main/resources/application.properties -------------------------------------------------------------------------------- /spring_cloud_in_action/config-client-eureka-kafka/src/main/java/com/didispace/Application.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.springframework.boot.autoconfigure.SpringBootApplication; 4 | import org.springframework.boot.builder.SpringApplicationBuilder; 5 | import org.springframework.cloud.client.discovery.EnableDiscoveryClient; 6 | 7 | @EnableDiscoveryClient 8 | @SpringBootApplication 9 | public class Application { 10 | 11 | public static void main(String[] args) { 12 | new SpringApplicationBuilder(Application.class).web(true).run(args); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /spring_cloud_in_action/config-client-eureka-kafka/src/main/java/com/didispace/web/TestController.java: -------------------------------------------------------------------------------- 1 | package com.didispace.web; 2 | 3 | import org.springframework.beans.factory.annotation.Value; 4 | import org.springframework.cloud.context.config.annotation.RefreshScope; 5 | import org.springframework.web.bind.annotation.RequestMapping; 6 | import org.springframework.web.bind.annotation.RestController; 7 | 8 | @RefreshScope 9 | @RestController 10 | public class TestController { 11 | 12 | @Value("${from}") 13 | private String from; 14 | 15 | @RequestMapping("/from") 16 | public String from() { 17 | return this.from; 18 | } 19 | 20 | public void setFrom(String from) { 21 | this.from = from; 22 | } 23 | 24 | public String getFrom() { 25 | return from; 26 | } 27 | 28 | } -------------------------------------------------------------------------------- /spring_cloud_in_action/config-client-eureka-kafka/src/main/resources/bootstrap.properties: -------------------------------------------------------------------------------- 1 | spring.application.name=didispace 2 | server.port=7002 3 | 4 | eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/ 5 | 6 | spring.cloud.config.discovery.enabled=true 7 | spring.cloud.config.discovery.serviceId=config-server 8 | spring.cloud.config.profile=dev 9 | 10 | spring.cloud.config.failFast=true 11 | 12 | #kafka 13 | spring.cloud.stream.kafka.binder.zk-nodes=localhost:2181 14 | spring.cloud.stream.kafka.binder.brokers=localhost:9092 15 | 16 | spring.cloud.bus.trace.enabled=true -------------------------------------------------------------------------------- /spring_cloud_in_action/config-client-eureka-rabbit/src/main/java/com/didispace/Application.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.springframework.boot.autoconfigure.SpringBootApplication; 4 | import org.springframework.boot.builder.SpringApplicationBuilder; 5 | import org.springframework.cloud.client.discovery.EnableDiscoveryClient; 6 | 7 | @EnableDiscoveryClient 8 | @SpringBootApplication 9 | public class Application { 10 | 11 | public static void main(String[] args) { 12 | new SpringApplicationBuilder(Application.class).web(true).run(args); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /spring_cloud_in_action/config-client-eureka-rabbit/src/main/java/com/didispace/web/TestController.java: -------------------------------------------------------------------------------- 1 | package com.didispace.web; 2 | 3 | import org.springframework.beans.factory.annotation.Value; 4 | import org.springframework.cloud.context.config.annotation.RefreshScope; 5 | import org.springframework.web.bind.annotation.RequestMapping; 6 | import org.springframework.web.bind.annotation.RestController; 7 | 8 | @RefreshScope 9 | @RestController 10 | public class TestController { 11 | 12 | @Value("${from}") 13 | private String from; 14 | 15 | @RequestMapping("/from") 16 | public String from() { 17 | return this.from; 18 | } 19 | 20 | public void setFrom(String from) { 21 | this.from = from; 22 | } 23 | 24 | public String getFrom() { 25 | return from; 26 | } 27 | 28 | } -------------------------------------------------------------------------------- /spring_cloud_in_action/config-client-eureka-rabbit/src/main/resources/bootstrap.properties: -------------------------------------------------------------------------------- 1 | spring.application.name=didispace 2 | server.port=7002 3 | 4 | eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/ 5 | 6 | spring.cloud.config.discovery.enabled=true 7 | spring.cloud.config.discovery.serviceId=config-server 8 | spring.cloud.config.profile=dev 9 | 10 | spring.cloud.config.failFast=true 11 | 12 | # RabbitMQ 13 | spring.rabbitmq.host=localhost 14 | spring.rabbitmq.port=5672 15 | spring.rabbitmq.username=springcloud 16 | spring.rabbitmq.password=123456 -------------------------------------------------------------------------------- /spring_cloud_in_action/config-client-eureka/src/main/java/com/didispace/Application.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.springframework.boot.autoconfigure.SpringBootApplication; 4 | import org.springframework.boot.builder.SpringApplicationBuilder; 5 | import org.springframework.cloud.client.discovery.EnableDiscoveryClient; 6 | 7 | @EnableDiscoveryClient 8 | @SpringBootApplication 9 | public class Application { 10 | 11 | public static void main(String[] args) { 12 | new SpringApplicationBuilder(Application.class).web(true).run(args); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /spring_cloud_in_action/config-client-eureka/src/main/java/com/didispace/web/TestController.java: -------------------------------------------------------------------------------- 1 | package com.didispace.web; 2 | 3 | import org.springframework.beans.factory.annotation.Value; 4 | import org.springframework.cloud.context.config.annotation.RefreshScope; 5 | import org.springframework.web.bind.annotation.RequestMapping; 6 | import org.springframework.web.bind.annotation.RestController; 7 | 8 | @RefreshScope 9 | @RestController 10 | public class TestController { 11 | 12 | @Value("${from}") 13 | private String from; 14 | 15 | @RequestMapping("/from") 16 | public String from() { 17 | return this.from; 18 | } 19 | 20 | public void setFrom(String from) { 21 | this.from = from; 22 | } 23 | 24 | public String getFrom() { 25 | return from; 26 | } 27 | 28 | } -------------------------------------------------------------------------------- /spring_cloud_in_action/config-client-eureka/src/main/resources/bootstrap.properties: -------------------------------------------------------------------------------- 1 | spring.application.name=didispace 2 | server.port=7002 3 | 4 | eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/ 5 | 6 | spring.cloud.config.discovery.enabled=true 7 | spring.cloud.config.discovery.serviceId=config-server 8 | spring.cloud.config.profile=dev 9 | 10 | spring.cloud.config.failFast=true -------------------------------------------------------------------------------- /spring_cloud_in_action/config-client/src/main/java/com/didispace/Application.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.springframework.boot.autoconfigure.SpringBootApplication; 4 | import org.springframework.boot.builder.SpringApplicationBuilder; 5 | 6 | @SpringBootApplication 7 | public class Application { 8 | 9 | public static void main(String[] args) { 10 | new SpringApplicationBuilder(Application.class).web(true).run(args); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /spring_cloud_in_action/config-client/src/main/java/com/didispace/web/TestController.java: -------------------------------------------------------------------------------- 1 | package com.didispace.web; 2 | 3 | import org.springframework.beans.factory.annotation.Value; 4 | import org.springframework.cloud.context.config.annotation.RefreshScope; 5 | import org.springframework.web.bind.annotation.RequestMapping; 6 | import org.springframework.web.bind.annotation.RestController; 7 | 8 | @RefreshScope 9 | @RestController 10 | public class TestController { 11 | 12 | @Value("${from}") 13 | private String from; 14 | 15 | @RequestMapping("/from") 16 | public String from() { 17 | return this.from; 18 | } 19 | 20 | public void setFrom(String from) { 21 | this.from = from; 22 | } 23 | 24 | public String getFrom() { 25 | return from; 26 | } 27 | 28 | } -------------------------------------------------------------------------------- /spring_cloud_in_action/config-client/src/main/resources/bootstrap.properties: -------------------------------------------------------------------------------- 1 | spring.application.name=didispace 2 | 3 | spring.cloud.config.profile=dev 4 | spring.cloud.config.uri=http://localhost:7001/ 5 | #spring.cloud.config.username=user 6 | #spring.cloud.config.password=37cc5635-559b-4e6f-b633-7e932b813f73 7 | 8 | server.port=7002 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /spring_cloud_in_action/config-repo/api-gateway.properties: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SpringForAll/SpringCloud-Learning/d1d38ff996caa7ec51ada8e4c7ecbb8fa4fff001/spring_cloud_in_action/config-repo/api-gateway.properties -------------------------------------------------------------------------------- /spring_cloud_in_action/config-repo/didispace-dev.properties: -------------------------------------------------------------------------------- 1 | from=git-dev-3.1 -------------------------------------------------------------------------------- /spring_cloud_in_action/config-repo/didispace-prod.properties: -------------------------------------------------------------------------------- 1 | from=git-prod-1.0 -------------------------------------------------------------------------------- /spring_cloud_in_action/config-repo/didispace-test.properties: -------------------------------------------------------------------------------- 1 | from=git-test-1.0 -------------------------------------------------------------------------------- /spring_cloud_in_action/config-repo/didispace.properties: -------------------------------------------------------------------------------- 1 | from=git-default-1.0 2 | -------------------------------------------------------------------------------- /spring_cloud_in_action/config-server-eureka-kafka/src/main/java/com/didispace/Application.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.springframework.boot.autoconfigure.SpringBootApplication; 4 | import org.springframework.boot.builder.SpringApplicationBuilder; 5 | import org.springframework.cloud.client.discovery.EnableDiscoveryClient; 6 | import org.springframework.cloud.config.server.EnableConfigServer; 7 | 8 | @EnableDiscoveryClient 9 | @EnableConfigServer 10 | @SpringBootApplication 11 | public class Application { 12 | 13 | public static void main(String[] args) { 14 | new SpringApplicationBuilder(Application.class).web(true).run(args); 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /spring_cloud_in_action/config-server-eureka-kafka/src/main/resources/application.properties: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SpringForAll/SpringCloud-Learning/d1d38ff996caa7ec51ada8e4c7ecbb8fa4fff001/spring_cloud_in_action/config-server-eureka-kafka/src/main/resources/application.properties -------------------------------------------------------------------------------- /spring_cloud_in_action/config-server-eureka-kafka/src/main/resources/didispace-dev.properties: -------------------------------------------------------------------------------- 1 | from=local-dev -------------------------------------------------------------------------------- /spring_cloud_in_action/config-server-eureka-kafka/src/main/resources/didispace-prod.properties: -------------------------------------------------------------------------------- 1 | from=local-prod -------------------------------------------------------------------------------- /spring_cloud_in_action/config-server-eureka-kafka/src/main/resources/didispace-test.properties: -------------------------------------------------------------------------------- 1 | from=local-test -------------------------------------------------------------------------------- /spring_cloud_in_action/config-server-eureka-kafka/src/main/resources/didispace.properties: -------------------------------------------------------------------------------- 1 | from=local -------------------------------------------------------------------------------- /spring_cloud_in_action/config-server-eureka-rabbit/src/main/java/com/didispace/Application.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.springframework.boot.autoconfigure.SpringBootApplication; 4 | import org.springframework.boot.builder.SpringApplicationBuilder; 5 | import org.springframework.cloud.client.discovery.EnableDiscoveryClient; 6 | import org.springframework.cloud.config.server.EnableConfigServer; 7 | 8 | @EnableDiscoveryClient 9 | @EnableConfigServer 10 | @SpringBootApplication 11 | public class Application { 12 | 13 | public static void main(String[] args) { 14 | new SpringApplicationBuilder(Application.class).web(true).run(args); 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /spring_cloud_in_action/config-server-eureka-rabbit/src/main/resources/application.properties: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SpringForAll/SpringCloud-Learning/d1d38ff996caa7ec51ada8e4c7ecbb8fa4fff001/spring_cloud_in_action/config-server-eureka-rabbit/src/main/resources/application.properties -------------------------------------------------------------------------------- /spring_cloud_in_action/config-server-eureka-rabbit/src/main/resources/didispace-dev.properties: -------------------------------------------------------------------------------- 1 | from=local-dev -------------------------------------------------------------------------------- /spring_cloud_in_action/config-server-eureka-rabbit/src/main/resources/didispace-prod.properties: -------------------------------------------------------------------------------- 1 | from=local-prod -------------------------------------------------------------------------------- /spring_cloud_in_action/config-server-eureka-rabbit/src/main/resources/didispace-test.properties: -------------------------------------------------------------------------------- 1 | from=local-test -------------------------------------------------------------------------------- /spring_cloud_in_action/config-server-eureka-rabbit/src/main/resources/didispace.properties: -------------------------------------------------------------------------------- 1 | from=local -------------------------------------------------------------------------------- /spring_cloud_in_action/config-server-eureka/src/main/java/com/didispace/Application.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.springframework.boot.autoconfigure.SpringBootApplication; 4 | import org.springframework.boot.builder.SpringApplicationBuilder; 5 | import org.springframework.cloud.client.discovery.EnableDiscoveryClient; 6 | import org.springframework.cloud.config.server.EnableConfigServer; 7 | 8 | @EnableDiscoveryClient 9 | @EnableConfigServer 10 | @SpringBootApplication 11 | public class Application { 12 | 13 | public static void main(String[] args) { 14 | new SpringApplicationBuilder(Application.class).web(true).run(args); 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /spring_cloud_in_action/config-server-eureka/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | spring.application.name=config-server 2 | server.port=7001 3 | 4 | eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/ 5 | 6 | # git¹ÜÀíÅäÖà 7 | spring.cloud.config.server.git.uri=http://git.oschina.net/didispace/SpringCloud-Learning/ 8 | spring.cloud.config.server.git.searchPaths=spring_cloud_in_action/config-repo 9 | spring.cloud.config.server.git.username=username 10 | spring.cloud.config.server.git.password=password 11 | -------------------------------------------------------------------------------- /spring_cloud_in_action/config-server-eureka/src/main/resources/didispace-dev.properties: -------------------------------------------------------------------------------- 1 | from=local-dev -------------------------------------------------------------------------------- /spring_cloud_in_action/config-server-eureka/src/main/resources/didispace-prod.properties: -------------------------------------------------------------------------------- 1 | from=local-prod -------------------------------------------------------------------------------- /spring_cloud_in_action/config-server-eureka/src/main/resources/didispace-test.properties: -------------------------------------------------------------------------------- 1 | from=local-test -------------------------------------------------------------------------------- /spring_cloud_in_action/config-server-eureka/src/main/resources/didispace.properties: -------------------------------------------------------------------------------- 1 | from=local -------------------------------------------------------------------------------- /spring_cloud_in_action/config-server/src/main/java/com/didispace/Application.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.springframework.boot.autoconfigure.SpringBootApplication; 4 | import org.springframework.boot.builder.SpringApplicationBuilder; 5 | import org.springframework.cloud.config.server.EnableConfigServer; 6 | 7 | @EnableConfigServer 8 | @SpringBootApplication 9 | public class Application { 10 | 11 | public static void main(String[] args) { 12 | new SpringApplicationBuilder(Application.class).web(true).run(args); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /spring_cloud_in_action/config-server/src/main/resources/application.properties: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SpringForAll/SpringCloud-Learning/d1d38ff996caa7ec51ada8e4c7ecbb8fa4fff001/spring_cloud_in_action/config-server/src/main/resources/application.properties -------------------------------------------------------------------------------- /spring_cloud_in_action/config-server/src/main/resources/config-server.keystore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SpringForAll/SpringCloud-Learning/d1d38ff996caa7ec51ada8e4c7ecbb8fa4fff001/spring_cloud_in_action/config-server/src/main/resources/config-server.keystore -------------------------------------------------------------------------------- /spring_cloud_in_action/config-server/src/main/resources/didispace-dev.properties: -------------------------------------------------------------------------------- 1 | from=local-dev -------------------------------------------------------------------------------- /spring_cloud_in_action/config-server/src/main/resources/didispace-prod.properties: -------------------------------------------------------------------------------- 1 | from=local-prod -------------------------------------------------------------------------------- /spring_cloud_in_action/config-server/src/main/resources/didispace-test.properties: -------------------------------------------------------------------------------- 1 | from=local-test -------------------------------------------------------------------------------- /spring_cloud_in_action/config-server/src/main/resources/didispace.properties: -------------------------------------------------------------------------------- 1 | from=local 2 | #from={cipher}AQBL4zN73nFahuirqUyWjgMD3o7FJJstbVKWfrSqh9k4V/GiS9osQRl0U17xsBX5nciFvm1XcfnB1tD13Hg3OCZds9tNS7NSixED4Kx7Bgq5vIuTzZpZkVb5YYvJyjFUhHnvdeTfgblsSS2a1NTABZ19n6quYnaupLdONKsa6goqagbg9FFwdvjLx0dWKfDsAF74lO9qYuCNsR2oJiDwvWnry3r3x8ewvXb6u0LxZ9DXGWPRsLITTY7BRkuwt3bra93gj4Elp4r1JFMwgAt6EbdF+7mXxVO51MPn9xvRKZPgpkk+e40t8Y/YjJ2P4SwzdbzMLuKbOwq2+MbWa37eyUt+f9BZ2GCFDHQPKDNIP3dWo4vuO0mja19osiWYUkOufcs= -------------------------------------------------------------------------------- /spring_cloud_in_action/consul-client-1/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | spring.application.name=consul-client-1 2 | server.port=3101 3 | 4 | spring.cloud.consul.host=localhost 5 | spring.cloud.consul.port=8500 6 | -------------------------------------------------------------------------------- /spring_cloud_in_action/diagram-uml/BusEndPoint.uml: -------------------------------------------------------------------------------- 1 | 2 | 3 | JAVA 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | All 12 | 13 | 14 | -------------------------------------------------------------------------------- /spring_cloud_in_action/eureka-server-ha/src/main/java/com/didispace/Application.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.springframework.boot.autoconfigure.SpringBootApplication; 4 | import org.springframework.boot.builder.SpringApplicationBuilder; 5 | import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; 6 | 7 | @EnableEurekaServer 8 | @SpringBootApplication 9 | public class Application { 10 | 11 | public static void main(String[] args) { 12 | new SpringApplicationBuilder(Application.class).web(true).run(args); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /spring_cloud_in_action/eureka-server-ha/src/main/resources/application-peer1.properties: -------------------------------------------------------------------------------- 1 | spring.application.name=eureka-server 2 | server.port=1111 3 | eureka.instance.hostname=peer1 4 | 5 | eureka.client.serviceUrl.defaultZone=http://peer2:1112/eureka/ -------------------------------------------------------------------------------- /spring_cloud_in_action/eureka-server-ha/src/main/resources/application-peer2.properties: -------------------------------------------------------------------------------- 1 | spring.application.name=eureka-server 2 | server.port=1112 3 | eureka.instance.hostname=peer2 4 | 5 | eureka.client.serviceUrl.defaultZone=http://peer1:1111/eureka/ -------------------------------------------------------------------------------- /spring_cloud_in_action/eureka-server-ha/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | server.port=1111 2 | eureka.instance.hostname=localhost 3 | 4 | eureka.client.register-with-eureka=false 5 | eureka.client.fetch-registry=false 6 | eureka.client.serviceUrl.defaultZone=http://localhost:${server.port}/eureka/ -------------------------------------------------------------------------------- /spring_cloud_in_action/eureka-server/src/main/java/com/didispace/Application.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.springframework.boot.autoconfigure.SpringBootApplication; 4 | import org.springframework.boot.builder.SpringApplicationBuilder; 5 | import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; 6 | 7 | @EnableEurekaServer 8 | @SpringBootApplication 9 | public class Application { 10 | 11 | public static void main(String[] args) { 12 | new SpringApplicationBuilder(Application.class).web(true).run(args); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /spring_cloud_in_action/eureka-server/src/main/resources/application-peer1.properties: -------------------------------------------------------------------------------- 1 | spring.application.name=eureka-server 2 | server.port=1111 3 | eureka.instance.hostname=peer1 4 | 5 | eureka.client.serviceUrl.defaultZone=http://peer2:1112/eureka/ -------------------------------------------------------------------------------- /spring_cloud_in_action/eureka-server/src/main/resources/application-peer2.properties: -------------------------------------------------------------------------------- 1 | spring.application.name=eureka-server 2 | server.port=1112 3 | eureka.instance.hostname=peer2 4 | 5 | eureka.client.serviceUrl.defaultZone=http://peer1:1111/eureka/ -------------------------------------------------------------------------------- /spring_cloud_in_action/eureka-server/src/main/resources/application.properties: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SpringForAll/SpringCloud-Learning/d1d38ff996caa7ec51ada8e4c7ecbb8fa4fff001/spring_cloud_in_action/eureka-server/src/main/resources/application.properties -------------------------------------------------------------------------------- /spring_cloud_in_action/feign-consumer/src/main/java/com/didispace/ConsumerApplication.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import feign.Logger; 4 | import org.springframework.boot.SpringApplication; 5 | import org.springframework.boot.autoconfigure.SpringBootApplication; 6 | import org.springframework.cloud.client.discovery.EnableDiscoveryClient; 7 | import org.springframework.cloud.netflix.feign.EnableFeignClients; 8 | import org.springframework.context.annotation.Bean; 9 | 10 | @EnableFeignClients 11 | @EnableDiscoveryClient 12 | @SpringBootApplication 13 | public class ConsumerApplication { 14 | 15 | // @Bean 16 | // Logger.Level feignLoggerLevel() { 17 | // return Logger.Level.FULL; 18 | // } 19 | 20 | public static void main(String[] args) { 21 | SpringApplication.run(ConsumerApplication.class, args); 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /spring_cloud_in_action/feign-consumer/src/main/java/com/didispace/web/HelloService.java: -------------------------------------------------------------------------------- 1 | package com.didispace.web; 2 | 3 | import org.springframework.cloud.netflix.feign.FeignClient; 4 | import org.springframework.web.bind.annotation.*; 5 | 6 | @FeignClient(name="HELLO-SERVICE", fallback = HelloServiceFallback.class) 7 | public interface HelloService { 8 | 9 | @RequestMapping("/hello") 10 | String hello(); 11 | 12 | @RequestMapping(value = "/hello1", method = RequestMethod.GET) 13 | String hello(@RequestParam("name") String name) ; 14 | 15 | @RequestMapping(value = "/hello2", method = RequestMethod.GET) 16 | User hello(@RequestHeader("name") String name, @RequestHeader("age") Integer age); 17 | 18 | @RequestMapping(value = "/hello3", method = RequestMethod.POST) 19 | String hello(@RequestBody User user); 20 | 21 | } -------------------------------------------------------------------------------- /spring_cloud_in_action/feign-consumer/src/main/java/com/didispace/web/HelloServiceFallback.java: -------------------------------------------------------------------------------- 1 | package com.didispace.web; 2 | 3 | import org.springframework.stereotype.Component; 4 | import org.springframework.web.bind.annotation.RequestBody; 5 | import org.springframework.web.bind.annotation.RequestHeader; 6 | import org.springframework.web.bind.annotation.RequestParam; 7 | 8 | /** 9 | * Created by Administrator on 2016/9/16. 10 | */ 11 | @Component 12 | public class HelloServiceFallback implements HelloService { 13 | 14 | @Override 15 | public String hello() { 16 | return "error"; 17 | } 18 | 19 | @Override 20 | public String hello(@RequestParam("name") String name) { 21 | return "error"; 22 | } 23 | 24 | @Override 25 | public User hello(@RequestHeader("name") String name, @RequestHeader("age") Integer age) { 26 | return new User("未知", 0); 27 | } 28 | 29 | @Override 30 | public String hello(@RequestBody User user) { 31 | return "error"; 32 | } 33 | 34 | } 35 | -------------------------------------------------------------------------------- /spring_cloud_in_action/feign-consumer/src/main/java/com/didispace/web/RefactorHelloService.java: -------------------------------------------------------------------------------- 1 | package com.didispace.web; 2 | 3 | import org.springframework.cloud.netflix.feign.FeignClient; 4 | 5 | @FeignClient(value = "HELLO-SERVICE") 6 | public interface RefactorHelloService extends com.didispace.service.HelloService { 7 | 8 | 9 | } -------------------------------------------------------------------------------- /spring_cloud_in_action/feign-consumer/src/main/java/com/didispace/web/User.java: -------------------------------------------------------------------------------- 1 | package com.didispace.web; 2 | 3 | /** 4 | * Created by Administrator on 2016/9/16. 5 | */ 6 | public class User { 7 | 8 | private String name; 9 | private Integer age; 10 | 11 | public User() {} 12 | 13 | public User(String name, Integer age) { 14 | this.name = name; 15 | this.age = age; 16 | } 17 | 18 | public String getName() { 19 | return name; 20 | } 21 | 22 | public void setName(String name) { 23 | this.name = name; 24 | } 25 | 26 | public Integer getAge() { 27 | return age; 28 | } 29 | 30 | public void setAge(Integer age) { 31 | this.age = age; 32 | } 33 | 34 | @Override 35 | public String toString() { 36 | return "name=" + name + ", age=" +age; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /spring_cloud_in_action/feign-consumer/src/main/resources/application.properties: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SpringForAll/SpringCloud-Learning/d1d38ff996caa7ec51ada8e4c7ecbb8fa4fff001/spring_cloud_in_action/feign-consumer/src/main/resources/application.properties -------------------------------------------------------------------------------- /spring_cloud_in_action/hello-service-api/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 4.0.0 5 | 6 | com.didispace 7 | hello-service-api 8 | 0.0.1-SNAPSHOT 9 | jar 10 | 11 | hello-service-api 12 | 13 | 14 | org.springframework.boot 15 | spring-boot-starter-parent 16 | 1.3.7.RELEASE 17 | 18 | 19 | 20 | 21 | UTF-8 22 | UTF-8 23 | 1.8 24 | 25 | 26 | 27 | 28 | org.springframework.boot 29 | spring-boot-starter-web 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /spring_cloud_in_action/hello-service-api/src/main/java/com/didispace/dto/User.java: -------------------------------------------------------------------------------- 1 | package com.didispace.dto; 2 | 3 | /** 4 | * Created by Administrator on 2016/9/16. 5 | */ 6 | public class User { 7 | 8 | private String name; 9 | private Integer age; 10 | 11 | public User() { 12 | } 13 | 14 | public User(String name, Integer age) { 15 | this.name = name; 16 | this.age = age; 17 | } 18 | 19 | public String getName() { 20 | return name; 21 | } 22 | 23 | public void setName(String name) { 24 | this.name = name; 25 | } 26 | 27 | public Integer getAge() { 28 | return age; 29 | } 30 | 31 | public void setAge(Integer age) { 32 | this.age = age; 33 | } 34 | 35 | @Override 36 | public String toString() { 37 | return "name=" + name + ", age=" +age; 38 | } 39 | 40 | } 41 | -------------------------------------------------------------------------------- /spring_cloud_in_action/hello-service-api/src/main/java/com/didispace/service/HelloService.java: -------------------------------------------------------------------------------- 1 | package com.didispace.service; 2 | 3 | import com.didispace.dto.User; 4 | import org.springframework.web.bind.annotation.*; 5 | 6 | @RequestMapping("/refactor") 7 | public interface HelloService { 8 | 9 | @RequestMapping(value = "/hello4", method = RequestMethod.GET) 10 | String hello(@RequestParam("name") String name) ; 11 | 12 | @RequestMapping(value = "/hello5", method = RequestMethod.GET) 13 | User hello(@RequestHeader("name") String name, @RequestHeader("age") Integer age); 14 | 15 | @RequestMapping(value = "/hello6", method = RequestMethod.POST) 16 | String hello(@RequestBody User user); 17 | 18 | } -------------------------------------------------------------------------------- /spring_cloud_in_action/hello-service/src/main/java/com/didispace/HelloApplication.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | import org.springframework.cloud.client.discovery.EnableDiscoveryClient; 6 | import org.springframework.cloud.netflix.hystrix.EnableHystrix; 7 | 8 | @EnableHystrix 9 | @EnableDiscoveryClient 10 | @SpringBootApplication 11 | public class HelloApplication { 12 | 13 | public static void main(String[] args) { 14 | SpringApplication.run(HelloApplication.class, args); 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /spring_cloud_in_action/hello-service/src/main/java/com/didispace/indicator/RocketMQHealthIndicator.java: -------------------------------------------------------------------------------- 1 | package com.didispace.indicator; 2 | 3 | import org.springframework.boot.actuate.health.Health; 4 | import org.springframework.boot.actuate.health.HealthIndicator; 5 | import org.springframework.stereotype.Component; 6 | 7 | @Component 8 | public class RocketMQHealthIndicator implements HealthIndicator { 9 | 10 | @Override 11 | public Health health() { 12 | int errorCode = check(); 13 | if (errorCode != 0) { 14 | return Health.down().withDetail("Error Code", errorCode).build(); 15 | } 16 | return Health.up().build(); 17 | } 18 | 19 | private int check() { 20 | // perform some specific health check 21 | return 0; 22 | } 23 | 24 | } -------------------------------------------------------------------------------- /spring_cloud_in_action/hello-service/src/main/java/com/didispace/web/RefactorHelloController.java: -------------------------------------------------------------------------------- 1 | package com.didispace.web; 2 | 3 | import com.didispace.dto.User; 4 | import com.didispace.service.HelloService; 5 | import org.springframework.web.bind.annotation.*; 6 | 7 | @RestController 8 | public class RefactorHelloController implements HelloService { 9 | 10 | @Override 11 | public String hello(@RequestParam("name") String name) { 12 | return "Hello " + name; 13 | } 14 | 15 | @Override 16 | public User hello(@RequestHeader("name") String name, @RequestHeader("age") Integer age) { 17 | return new User(name, age); 18 | } 19 | 20 | @Override 21 | public String hello(@RequestBody User user) { 22 | return "Hello "+ user.getName() + ", " + user.getAge(); 23 | } 24 | 25 | } -------------------------------------------------------------------------------- /spring_cloud_in_action/hello-service/src/main/java/com/didispace/web/User.java: -------------------------------------------------------------------------------- 1 | package com.didispace.web; 2 | 3 | /** 4 | * Created by Administrator on 2016/9/16. 5 | */ 6 | public class User { 7 | 8 | private String name; 9 | private Integer age; 10 | 11 | public User() { 12 | } 13 | 14 | public User(String name, Integer age) { 15 | this.name = name; 16 | this.age = age; 17 | } 18 | 19 | public String getName() { 20 | return name; 21 | } 22 | 23 | public void setName(String name) { 24 | this.name = name; 25 | } 26 | 27 | public Integer getAge() { 28 | return age; 29 | } 30 | 31 | public void setAge(Integer age) { 32 | this.age = age; 33 | } 34 | 35 | @Override 36 | public String toString() { 37 | return "name=" + name + ", age=" +age; 38 | } 39 | 40 | } 41 | -------------------------------------------------------------------------------- /spring_cloud_in_action/hello-service/src/main/resources/application.properties: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SpringForAll/SpringCloud-Learning/d1d38ff996caa7ec51ada8e4c7ecbb8fa4fff001/spring_cloud_in_action/hello-service/src/main/resources/application.properties -------------------------------------------------------------------------------- /spring_cloud_in_action/hystrix-dashboard/src/main/java/com/didispace/HystrixDashboardApplication.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.cloud.client.SpringCloudApplication; 5 | import org.springframework.cloud.netflix.hystrix.dashboard.EnableHystrixDashboard; 6 | 7 | @EnableHystrixDashboard 8 | @SpringCloudApplication 9 | public class HystrixDashboardApplication { 10 | 11 | public static void main(String[] args) { 12 | SpringApplication.run(HystrixDashboardApplication.class, args); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /spring_cloud_in_action/hystrix-dashboard/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | spring.application.name=hystrix-dashboard 2 | server.port=2001 -------------------------------------------------------------------------------- /spring_cloud_in_action/rabbitmq-hello/src/main/java/com/didispace/HelloApplication.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | 6 | @SpringBootApplication 7 | public class HelloApplication { 8 | 9 | public static void main(String[] args) { 10 | SpringApplication.run(HelloApplication.class, args); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /spring_cloud_in_action/rabbitmq-hello/src/main/java/com/didispace/rabbit/RabbitConfig.java: -------------------------------------------------------------------------------- 1 | package com.didispace.rabbit; 2 | 3 | import org.springframework.amqp.core.Queue; 4 | import org.springframework.context.annotation.Bean; 5 | import org.springframework.context.annotation.Configuration; 6 | 7 | /** 8 | * @author 翟永超 9 | * @create 2016/9/25. 10 | * @blog http://blog.didispace.com 11 | */ 12 | @Configuration 13 | public class RabbitConfig { 14 | 15 | @Bean 16 | public Queue helloQueue() { 17 | return new Queue("hello"); 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /spring_cloud_in_action/rabbitmq-hello/src/main/java/com/didispace/rabbit/Receiver.java: -------------------------------------------------------------------------------- 1 | package com.didispace.rabbit; 2 | 3 | import org.springframework.amqp.rabbit.annotation.RabbitHandler; 4 | import org.springframework.amqp.rabbit.annotation.RabbitListener; 5 | import org.springframework.cache.annotation.Cacheable; 6 | import org.springframework.stereotype.Component; 7 | 8 | import java.util.Date; 9 | 10 | /** 11 | * @author 翟永超 12 | * @create 2016/9/25. 13 | * @blog http://blog.didispace.com 14 | */ 15 | @Component 16 | @RabbitListener(queues = "hello") 17 | public class Receiver { 18 | 19 | @RabbitHandler 20 | public void process(String hello) { 21 | System.out.println("Receiver : " + hello); 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /spring_cloud_in_action/rabbitmq-hello/src/main/java/com/didispace/rabbit/Sender.java: -------------------------------------------------------------------------------- 1 | package com.didispace.rabbit; 2 | 3 | import org.springframework.amqp.core.AmqpTemplate; 4 | import org.springframework.amqp.rabbit.core.RabbitTemplate; 5 | import org.springframework.beans.factory.annotation.Autowired; 6 | import org.springframework.stereotype.Component; 7 | 8 | import java.util.Date; 9 | 10 | @Component 11 | public class Sender { 12 | 13 | @Autowired 14 | private AmqpTemplate rabbitTemplate; 15 | 16 | public void send() { 17 | String context = "hello " + new Date(); 18 | System.out.println("Sender : " + context); 19 | this.rabbitTemplate.convertAndSend("hello", context); 20 | } 21 | 22 | } -------------------------------------------------------------------------------- /spring_cloud_in_action/rabbitmq-hello/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | spring.application.name=rabbitmq-hello 2 | 3 | spring.rabbitmq.host=localhost 4 | spring.rabbitmq.port=5672 5 | spring.rabbitmq.username=springcloud 6 | spring.rabbitmq.password=123456 7 | -------------------------------------------------------------------------------- /spring_cloud_in_action/rabbitmq-hello/src/test/java/com/didispace/HelloApplicationTests.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import com.didispace.rabbit.Sender; 4 | import org.junit.Test; 5 | import org.junit.runner.RunWith; 6 | import org.springframework.beans.factory.annotation.Autowired; 7 | import org.springframework.boot.test.SpringApplicationConfiguration; 8 | import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; 9 | 10 | @RunWith(SpringJUnit4ClassRunner.class) 11 | @SpringApplicationConfiguration(classes = HelloApplication.class) 12 | public class HelloApplicationTests { 13 | 14 | @Autowired 15 | private Sender sender; 16 | 17 | @Test 18 | public void hello() throws Exception { 19 | sender.send(); 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /spring_cloud_in_action/ribbon-consumer/src/main/java/com/didispace/ConsumerApplication.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker; 6 | import org.springframework.cloud.client.discovery.EnableDiscoveryClient; 7 | import org.springframework.cloud.client.loadbalancer.LoadBalanced; 8 | import org.springframework.context.annotation.Bean; 9 | import org.springframework.web.client.RestTemplate; 10 | 11 | @EnableCircuitBreaker 12 | @EnableDiscoveryClient 13 | @SpringBootApplication 14 | public class ConsumerApplication { 15 | 16 | @Bean 17 | @LoadBalanced 18 | RestTemplate restTemplate() { 19 | return new RestTemplate(); 20 | } 21 | public static void main(String[] args) { 22 | SpringApplication.run(ConsumerApplication.class, args); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /spring_cloud_in_action/ribbon-consumer/src/main/java/com/didispace/web/ConsumerController.java: -------------------------------------------------------------------------------- 1 | package com.didispace.web; 2 | 3 | import org.springframework.beans.factory.annotation.Autowired; 4 | import org.springframework.web.bind.annotation.RequestMapping; 5 | import org.springframework.web.bind.annotation.RequestMethod; 6 | import org.springframework.web.bind.annotation.RestController; 7 | 8 | @RestController 9 | public class ConsumerController { 10 | 11 | @Autowired 12 | HelloService helloService; 13 | 14 | @RequestMapping(value = "/ribbon-consumer", method = RequestMethod.GET) 15 | public String helloConsumer() { 16 | return helloService.hello(); 17 | } 18 | 19 | } -------------------------------------------------------------------------------- /spring_cloud_in_action/ribbon-consumer/src/main/java/com/didispace/web/User.java: -------------------------------------------------------------------------------- 1 | package com.didispace.web; 2 | 3 | /** 4 | * Created by Administrator on 2016/9/16. 5 | */ 6 | public class User { 7 | 8 | private String name; 9 | private Integer age; 10 | 11 | public User() { 12 | } 13 | 14 | public User(String name, Integer age) { 15 | this.name = name; 16 | this.age = age; 17 | } 18 | 19 | public String getName() { 20 | return name; 21 | } 22 | 23 | public void setName(String name) { 24 | this.name = name; 25 | } 26 | 27 | public Integer getAge() { 28 | return age; 29 | } 30 | 31 | public void setAge(Integer age) { 32 | this.age = age; 33 | } 34 | 35 | @Override 36 | public String toString() { 37 | return "name=" + name + ", age=" +age; 38 | } 39 | 40 | } 41 | -------------------------------------------------------------------------------- /spring_cloud_in_action/ribbon-consumer/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | spring.application.name=ribbon-consumer 2 | server.port=9000 3 | 4 | eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/ 5 | 6 | #hystrix.command.helloKey.execution.isolation.thread.timeoutInMilliseconds=5000 7 | hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=2000 -------------------------------------------------------------------------------- /spring_cloud_in_action/spring-boot-hello/src/main/java/com/didispace/HelloApplication.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | 6 | @SpringBootApplication 7 | public class HelloApplication { 8 | 9 | public static void main(String[] args) { 10 | SpringApplication.run(HelloApplication.class, args); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /spring_cloud_in_action/spring-boot-hello/src/main/java/com/didispace/web/HelloController.java: -------------------------------------------------------------------------------- 1 | package com.didispace.web; 2 | 3 | import org.springframework.web.bind.annotation.RequestMapping; 4 | import org.springframework.web.bind.annotation.RestController; 5 | 6 | @RestController 7 | public class HelloController { 8 | 9 | @RequestMapping("/hello") 10 | public String index() { 11 | return "Hello World"; 12 | } 13 | 14 | } -------------------------------------------------------------------------------- /spring_cloud_in_action/spring-boot-hello/src/main/resources/application-dev.properties: -------------------------------------------------------------------------------- 1 | server.port=8881 -------------------------------------------------------------------------------- /spring_cloud_in_action/spring-boot-hello/src/main/resources/application-prod.properties: -------------------------------------------------------------------------------- 1 | server.port=8883 -------------------------------------------------------------------------------- /spring_cloud_in_action/spring-boot-hello/src/main/resources/application-test.properties: -------------------------------------------------------------------------------- 1 | server.port=8882 -------------------------------------------------------------------------------- /spring_cloud_in_action/spring-boot-hello/src/main/resources/application.properties: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SpringForAll/SpringCloud-Learning/d1d38ff996caa7ec51ada8e4c7ecbb8fa4fff001/spring_cloud_in_action/spring-boot-hello/src/main/resources/application.properties -------------------------------------------------------------------------------- /spring_cloud_in_action/stream-consumer/src/main/java/com/didispace/HelloApplication.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | import org.springframework.context.annotation.Bean; 6 | import org.springframework.messaging.converter.MessageConverter; 7 | 8 | @SpringBootApplication 9 | public class HelloApplication { 10 | 11 | public static void main(String[] args) { 12 | SpringApplication.run(HelloApplication.class, args); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /spring_cloud_in_action/stream-consumer/src/main/java/com/didispace/SinkReceiver1.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.slf4j.Logger; 4 | import org.slf4j.LoggerFactory; 5 | import org.springframework.cloud.stream.annotation.EnableBinding; 6 | import org.springframework.cloud.stream.annotation.StreamListener; 7 | import org.springframework.cloud.stream.messaging.Sink; 8 | 9 | /** 10 | * 快速入门 11 | * 12 | * @author 翟永超 13 | * @create 2016/11/8. 14 | * @blog http://blog.didispace.com 15 | */ 16 | //@EnableBinding(value = {Sink.class}) 17 | public class SinkReceiver1 { 18 | 19 | private static Logger logger = LoggerFactory.getLogger(HelloApplication.class); 20 | 21 | @StreamListener(Sink.INPUT) 22 | public void receive(Object payload) { 23 | logger.info("Received: " + payload); 24 | } 25 | 26 | } 27 | -------------------------------------------------------------------------------- /spring_cloud_in_action/stream-consumer/src/main/java/com/didispace/SinkReceiver2.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.slf4j.Logger; 4 | import org.slf4j.LoggerFactory; 5 | import org.springframework.cloud.stream.annotation.EnableBinding; 6 | import org.springframework.cloud.stream.annotation.StreamListener; 7 | import org.springframework.cloud.stream.messaging.Sink; 8 | 9 | /** 10 | * @author 翟永超 11 | * @create 2016/11/8. 12 | * @blog http://blog.didispace.com 13 | */ 14 | //@EnableBinding(value = {Sink.class}) 15 | public class SinkReceiver2 { 16 | 17 | private static Logger logger = LoggerFactory.getLogger(HelloApplication.class); 18 | 19 | 20 | @StreamListener(Sink.INPUT) 21 | public void receive(User user) { 22 | logger.info("Received: " + user); 23 | } 24 | 25 | /**原生实现需要实现转换**/ 26 | 27 | // @ServiceActivator(inputChannel=Sink.INPUT) 28 | // public void receive(User user) { 29 | // logger.info("Received: " + user); 30 | // } 31 | // 32 | // @Transformer(inputChannel = Sink.INPUT, outputChannel = Sink.INPUT) 33 | // public User transform(String message) throws Exception { 34 | // ObjectMapper objectMapper = new ObjectMapper(); 35 | // User user = objectMapper.readValue(message, User.class); 36 | // return user; 37 | // } 38 | 39 | } 40 | -------------------------------------------------------------------------------- /spring_cloud_in_action/stream-consumer/src/main/java/com/didispace/SinkReceiver4.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.slf4j.Logger; 4 | import org.slf4j.LoggerFactory; 5 | import org.springframework.cloud.stream.annotation.EnableBinding; 6 | import org.springframework.cloud.stream.annotation.StreamListener; 7 | import org.springframework.cloud.stream.messaging.Sink; 8 | 9 | /** 10 | * 分区试验接收者 11 | * @author 翟永超 12 | * @create 2016/11/8. 13 | * @blog http://blog.didispace.com 14 | */ 15 | @EnableBinding(value = {Sink.class}) 16 | public class SinkReceiver4 { 17 | 18 | private static Logger logger = LoggerFactory.getLogger(HelloApplication.class); 19 | 20 | 21 | @StreamListener(Sink.INPUT) 22 | public void receive(User user) { 23 | logger.info("Received: " + user); 24 | } 25 | 26 | // 配置属性如下: 27 | // # Comsumer Group:input 28 | // spring.cloud.stream.bindings.input.group=Service-A 29 | // 30 | // # Partition 31 | // spring.cloud.stream.bindings.input.destination=greetings 32 | // spring.cloud.stream.bindings.input.consumer.partitioned=true 33 | // spring.cloud.stream.instanceCount=2 34 | // spring.cloud.stream.instanceIndex=0 35 | 36 | } 37 | -------------------------------------------------------------------------------- /spring_cloud_in_action/stream-consumer/src/main/java/com/didispace/User.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import java.io.Serializable; 4 | 5 | /** 6 | * @author 翟永超 7 | * @create 2016/11/13. 8 | * @blog http://blog.didispace.com 9 | */ 10 | public class User implements Serializable { 11 | 12 | private String name; 13 | private Integer age; 14 | 15 | public User() { 16 | 17 | } 18 | 19 | public User(String name, Integer age) { 20 | this.name = name; 21 | this.age = age; 22 | } 23 | 24 | public String getName() { 25 | return name; 26 | } 27 | 28 | public void setName(String name) { 29 | this.name = name; 30 | } 31 | 32 | public Integer getAge() { 33 | return age; 34 | } 35 | 36 | public void setAge(Integer age) { 37 | this.age = age; 38 | } 39 | 40 | @Override 41 | public String toString() { 42 | return "name=" + name + ", age=" + age; 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /spring_cloud_in_action/stream-consumer/src/test/java/com/didispace/HelloApplicationTests.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.junit.Test; 4 | import org.junit.runner.RunWith; 5 | import org.springframework.beans.factory.annotation.Autowired; 6 | import org.springframework.boot.test.SpringApplicationConfiguration; 7 | import org.springframework.cloud.stream.annotation.Output; 8 | import org.springframework.integration.support.MessageBuilder; 9 | import org.springframework.messaging.MessageChannel; 10 | import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; 11 | import org.springframework.test.context.web.WebAppConfiguration; 12 | 13 | @RunWith(SpringJUnit4ClassRunner.class) 14 | @SpringApplicationConfiguration(classes = HelloApplication.class) 15 | @WebAppConfiguration 16 | //@DirtiesContext 17 | public class HelloApplicationTests { 18 | 19 | @Autowired 20 | private SinkSender sinkSender; 21 | 22 | @Test 23 | public void contextLoads() { 24 | sinkSender.output().send(MessageBuilder.withPayload("From SinkSender").build()); 25 | } 26 | 27 | public interface SinkSender { 28 | 29 | String OUTPUT = "input"; 30 | 31 | @Output(SinkSender.OUTPUT) 32 | MessageChannel output(); 33 | 34 | } 35 | 36 | } 37 | -------------------------------------------------------------------------------- /spring_cloud_in_action/stream-consumer/src/test/java/com/didispace/HelloApplicationTests2.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.junit.Test; 4 | import org.junit.runner.RunWith; 5 | import org.springframework.beans.factory.annotation.Autowired; 6 | import org.springframework.beans.factory.annotation.Qualifier; 7 | import org.springframework.boot.test.SpringApplicationConfiguration; 8 | import org.springframework.integration.support.MessageBuilder; 9 | import org.springframework.messaging.MessageChannel; 10 | import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; 11 | import org.springframework.test.context.web.WebAppConfiguration; 12 | 13 | @RunWith(SpringJUnit4ClassRunner.class) 14 | @SpringApplicationConfiguration(classes = HelloApplication.class) 15 | @WebAppConfiguration 16 | //@DirtiesContext 17 | public class HelloApplicationTests2 { 18 | 19 | @Autowired @Qualifier("input") 20 | private MessageChannel output; 21 | 22 | @Test 23 | public void contextLoads() { 24 | output.send(MessageBuilder.withPayload("From MessageChannel").build()); 25 | } 26 | 27 | } 28 | -------------------------------------------------------------------------------- /spring_cloud_in_action/stream-consumer/src/test/java/com/didispace/HelloApplicationTests3.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.junit.Test; 4 | import org.junit.runner.RunWith; 5 | import org.springframework.beans.factory.annotation.Autowired; 6 | import org.springframework.beans.factory.annotation.Qualifier; 7 | import org.springframework.boot.test.SpringApplicationConfiguration; 8 | import org.springframework.integration.support.MessageBuilder; 9 | import org.springframework.messaging.Message; 10 | import org.springframework.messaging.MessageChannel; 11 | import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; 12 | import org.springframework.test.context.web.WebAppConfiguration; 13 | 14 | @RunWith(SpringJUnit4ClassRunner.class) 15 | @SpringApplicationConfiguration(classes = HelloApplication.class) 16 | @WebAppConfiguration 17 | //@DirtiesContext 18 | public class HelloApplicationTests3 { 19 | 20 | @Autowired @Qualifier("input") 21 | private MessageChannel output; 22 | 23 | @Test 24 | public void contextLoads() { 25 | Message message = MessageBuilder.withPayload("{\"name\":\"didi\", \"age\":30}").build(); 26 | output.send(message); 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /spring_cloud_in_action/stream-hello/src/main/java/com/didispace/aggregate/Sink/SinkApplication.java: -------------------------------------------------------------------------------- 1 | package com.didispace.aggregate.Sink; 2 | 3 | import org.slf4j.Logger; 4 | import org.slf4j.LoggerFactory; 5 | import org.springframework.boot.autoconfigure.SpringBootApplication; 6 | import org.springframework.cloud.stream.annotation.EnableBinding; 7 | import org.springframework.cloud.stream.messaging.Sink; 8 | import org.springframework.integration.annotation.ServiceActivator; 9 | 10 | @SpringBootApplication 11 | @EnableBinding(Sink.class) 12 | public class SinkApplication { 13 | 14 | private static Logger logger = LoggerFactory.getLogger(SinkApplication.class); 15 | 16 | @ServiceActivator(inputChannel=Sink.INPUT) 17 | public void loggerSink(Object payload) { 18 | logger.info("Received: " + payload); 19 | } 20 | } -------------------------------------------------------------------------------- /spring_cloud_in_action/stream-producer/src/main/java/com/didispace/HelloApplication.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | 6 | @SpringBootApplication 7 | public class HelloApplication { 8 | 9 | public static void main(String[] args) { 10 | SpringApplication.run(HelloApplication.class, args); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /spring_cloud_in_action/stream-producer/src/main/java/com/didispace/SinkSender3.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.slf4j.Logger; 4 | import org.slf4j.LoggerFactory; 5 | import org.springframework.cloud.stream.annotation.EnableBinding; 6 | import org.springframework.cloud.stream.messaging.Processor; 7 | import org.springframework.context.annotation.Bean; 8 | import org.springframework.integration.annotation.InboundChannelAdapter; 9 | import org.springframework.integration.annotation.Poller; 10 | import org.springframework.integration.core.MessageSource; 11 | import org.springframework.messaging.support.GenericMessage; 12 | 13 | /** 14 | * @author 翟永超 15 | * @create 2016/11/8. 16 | * @blog http://blog.didispace.com 17 | */ 18 | //@EnableBinding(value = {Processor.class}) 19 | public class SinkSender3 { 20 | 21 | private static Logger logger = LoggerFactory.getLogger(HelloApplication.class); 22 | 23 | @Bean 24 | @InboundChannelAdapter(value = Processor.OUTPUT, poller = @Poller(fixedDelay = "2000")) 25 | public MessageSource timerMessageSource() { 26 | // Map headers = new HashMap<>(); 27 | // headers.put("content-type", "application/user"); 28 | return () -> new GenericMessage<>("{\"name\":\"didi\", \"age\":30}"); 29 | } 30 | 31 | } 32 | -------------------------------------------------------------------------------- /spring_cloud_in_action/stream-producer/src/main/java/com/didispace/User.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import java.io.Serializable; 4 | 5 | /** 6 | * @author 翟永超 7 | * @create 2016/11/13. 8 | * @blog http://blog.didispace.com 9 | */ 10 | public class User implements Serializable { 11 | 12 | private String name; 13 | private Integer age; 14 | 15 | public User() { 16 | 17 | } 18 | 19 | public User(String name, Integer age) { 20 | this.name = name; 21 | this.age = age; 22 | } 23 | 24 | public String getName() { 25 | return name; 26 | } 27 | 28 | public void setName(String name) { 29 | this.name = name; 30 | } 31 | 32 | public Integer getAge() { 33 | return age; 34 | } 35 | 36 | public void setAge(Integer age) { 37 | this.age = age; 38 | } 39 | 40 | @Override 41 | public String toString() { 42 | return "name=" + name + ", age=" + age; 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /spring_cloud_in_action/stream-producer/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | spring.application.name=rabbitmq-hello-2 2 | server.port=8002 3 | 4 | # Topic 5 | #spring.cloud.stream.bindings.input.destination=output 6 | #spring.cloud.stream.bindings.output.destination=input 7 | spring.cloud.stream.bindings.input.content-type=application/json 8 | spring.cloud.stream.bindings.output.content-type=application/json 9 | 10 | # RabbitMQ 11 | #spring.rabbitmq.host=localhost 12 | #spring.rabbitmq.port=5672 13 | #spring.rabbitmq.username=springcloud 14 | #spring.rabbitmq.password=123456 15 | 16 | # Comsumer Group:input 17 | #spring.cloud.stream.bindings.input.group=Service-A 18 | 19 | # Partition 20 | spring.cloud.stream.bindings.output.destination=greetings 21 | spring.cloud.stream.bindings.output.producer.partitionKeyExpression=payload 22 | spring.cloud.stream.bindings.output.producer.partitionCount=2 23 | -------------------------------------------------------------------------------- /spring_cloud_in_action/trace-1/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | spring.application.name=trace-1 2 | server.port=9101 3 | 4 | eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/ 5 | 6 | spring.zipkin.base-url=http://localhost:9411 7 | 8 | spring.sleuth.sampler.percentage=0.1 9 | 10 | # log trace detail 11 | logging.level.org.springframework.web.servlet.DispatcherServlet=DEBUG -------------------------------------------------------------------------------- /spring_cloud_in_action/trace-2/src/main/java/com/didispace/TraceApplication.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.slf4j.Logger; 4 | import org.slf4j.LoggerFactory; 5 | import org.springframework.boot.SpringApplication; 6 | import org.springframework.boot.autoconfigure.SpringBootApplication; 7 | import org.springframework.cloud.client.discovery.EnableDiscoveryClient; 8 | import org.springframework.web.bind.annotation.RequestMapping; 9 | import org.springframework.web.bind.annotation.RequestMethod; 10 | import org.springframework.web.bind.annotation.RestController; 11 | 12 | import javax.servlet.http.HttpServletRequest; 13 | 14 | @RestController 15 | @EnableDiscoveryClient 16 | @SpringBootApplication 17 | public class TraceApplication { 18 | 19 | private final Logger logger = LoggerFactory.getLogger(getClass()); 20 | 21 | @RequestMapping(value = "/trace-2", method = RequestMethod.GET) 22 | public String trace(HttpServletRequest request) { 23 | logger.info("======", 24 | request.getHeader("X-B3-TraceId"), request.getHeader("X-B3-SpanId")); 25 | return "Trace"; 26 | } 27 | 28 | public static void main(String[] args) { 29 | SpringApplication.run(TraceApplication.class, args); 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /spring_cloud_in_action/trace-2/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/ 2 | 3 | spring.zipkin.base-url=http://localhost:9411 4 | 5 | spring.sleuth.sampler.percentage=0.1 6 | 7 | # log trace detail 8 | logging.level.org.springframework.web.servlet.DispatcherServlet=DEBUG -------------------------------------------------------------------------------- /spring_cloud_in_action/trace-stream-1/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | spring.application.name=trace-1 2 | server.port=9101 3 | 4 | eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/ 5 | 6 | spring.rabbitmq.host=localhost 7 | spring.rabbitmq.port=5672 8 | spring.rabbitmq.username=springcloud 9 | spring.rabbitmq.password=123456 10 | 11 | #spring.sleuth.sampler.percentage=0.1 12 | 13 | # log trace detail 14 | logging.level.org.springframework.web.servlet.DispatcherServlet=DEBUG 15 | 16 | logging.file=${spring.application.name}.log -------------------------------------------------------------------------------- /spring_cloud_in_action/trace-stream-2/src/main/java/com/didispace/TraceApplication.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.slf4j.Logger; 4 | import org.slf4j.LoggerFactory; 5 | import org.springframework.boot.SpringApplication; 6 | import org.springframework.boot.autoconfigure.SpringBootApplication; 7 | import org.springframework.cloud.client.discovery.EnableDiscoveryClient; 8 | import org.springframework.web.bind.annotation.RequestMapping; 9 | import org.springframework.web.bind.annotation.RequestMethod; 10 | import org.springframework.web.bind.annotation.RestController; 11 | 12 | import javax.servlet.http.HttpServletRequest; 13 | 14 | @RestController 15 | @EnableDiscoveryClient 16 | @SpringBootApplication 17 | public class TraceApplication { 18 | 19 | private final Logger logger = LoggerFactory.getLogger(getClass()); 20 | 21 | @RequestMapping(value = "/trace-2", method = RequestMethod.GET) 22 | public String trace(HttpServletRequest request) { 23 | logger.info("======", 24 | request.getHeader("X-B3-TraceId"), request.getHeader("X-B3-SpanId")); 25 | return "Trace"; 26 | } 27 | 28 | public static void main(String[] args) { 29 | SpringApplication.run(TraceApplication.class, args); 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /spring_cloud_in_action/trace-stream-2/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | spring.application.name=trace-2 2 | server.port=9102 3 | 4 | eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/ 5 | 6 | spring.rabbitmq.host=localhost 7 | spring.rabbitmq.port=5672 8 | spring.rabbitmq.username=springcloud 9 | spring.rabbitmq.password=123456 10 | 11 | #spring.sleuth.sampler.percentage=0.1 12 | 13 | # log trace detail 14 | logging.level.org.springframework.web.servlet.DispatcherServlet=DEBUG 15 | 16 | logging.file=${spring.application.name}.log -------------------------------------------------------------------------------- /spring_cloud_in_action/turbine-amqp/src/main/java/com/didispace/TurbineApplication.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.EnableAutoConfiguration; 5 | import org.springframework.cloud.client.discovery.EnableDiscoveryClient; 6 | import org.springframework.cloud.netflix.turbine.stream.EnableTurbineStream; 7 | import org.springframework.context.annotation.Configuration; 8 | 9 | @Configuration 10 | @EnableAutoConfiguration 11 | @EnableTurbineStream 12 | @EnableDiscoveryClient 13 | public class TurbineApplication { 14 | 15 | public static void main(String[] args) { 16 | SpringApplication.run(TurbineApplication.class, args); 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /spring_cloud_in_action/turbine-amqp/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | spring.application.name=turbine-amqp 2 | 3 | server.port=7989 4 | management.port=7990 5 | 6 | eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/ -------------------------------------------------------------------------------- /spring_cloud_in_action/turbine/src/main/java/com/didispace/TurbineApplication.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.EnableAutoConfiguration; 5 | import org.springframework.cloud.client.discovery.EnableDiscoveryClient; 6 | import org.springframework.cloud.netflix.turbine.EnableTurbine; 7 | import org.springframework.context.annotation.Configuration; 8 | 9 | @Configuration 10 | @EnableAutoConfiguration 11 | @EnableTurbine 12 | @EnableDiscoveryClient 13 | public class TurbineApplication { 14 | 15 | public static void main(String[] args) { 16 | SpringApplication.run(TurbineApplication.class, args); 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /spring_cloud_in_action/turbine/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | spring.application.name=turbine 2 | 3 | server.port=8989 4 | management.port=8990 5 | 6 | eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/ 7 | 8 | turbine.app-config=RIBBON-CONSUMER,RIBBON-CONSUMER-2 9 | turbine.cluster-name-expression="default" 10 | turbine.combine-host-port=true -------------------------------------------------------------------------------- /spring_cloud_in_action/zipkin-server-stream-mysql/src/main/java/com/didispace/ZipkinApplication.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | import org.springframework.cloud.sleuth.zipkin.stream.EnableZipkinStreamServer; 6 | import org.springframework.context.annotation.Bean; 7 | import zipkin.server.EnableZipkinServer; 8 | import zipkin.storage.SpanStore; 9 | 10 | @EnableZipkinStreamServer 11 | @SpringBootApplication 12 | public class ZipkinApplication { 13 | 14 | public static void main(String[] args) { 15 | SpringApplication.run(ZipkinApplication.class, args); 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /spring_cloud_in_action/zipkin-server-stream-mysql/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | spring.application.name=zipkin-server-stream 2 | server.port=9411 3 | 4 | spring.rabbitmq.host=localhost 5 | spring.rabbitmq.port=5672 6 | spring.rabbitmq.username=springcloud 7 | spring.rabbitmq.password=123456 8 | 9 | spring.datasource.schema=classpath:/mysql.sql 10 | spring.datasource.url=jdbc:mysql://localhost:3306/zipkin 11 | spring.datasource.username=root 12 | spring.datasource.password=123456 13 | spring.datasrouce.continueOnError=true 14 | spring.datasrouce.initialize=true 15 | #spring.datasource.driver-class-name=com.mysql.jdbc.Driver 16 | 17 | #spring.sleuth.enabled=false 18 | 19 | zipkin.storage.type=mysql 20 | #zipkin.storage.type.mysql.username=root 21 | #zipkin.storage.type.mysql.password=123456 22 | #eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/ 23 | 24 | -------------------------------------------------------------------------------- /spring_cloud_in_action/zipkin-server-stream/src/main/java/com/didispace/ZipkinApplication.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | import org.springframework.cloud.sleuth.zipkin.stream.EnableZipkinStreamServer; 6 | import org.springframework.context.annotation.Bean; 7 | import zipkin.server.EnableZipkinServer; 8 | import zipkin.storage.SpanStore; 9 | 10 | @EnableZipkinStreamServer 11 | @SpringBootApplication 12 | public class ZipkinApplication { 13 | 14 | public static void main(String[] args) { 15 | SpringApplication.run(ZipkinApplication.class, args); 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /spring_cloud_in_action/zipkin-server-stream/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | spring.application.name=zipkin-server-stream 2 | server.port=9411 3 | 4 | spring.rabbitmq.host=localhost 5 | spring.rabbitmq.port=5672 6 | spring.rabbitmq.username=springcloud 7 | spring.rabbitmq.password=123456 8 | 9 | #eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/ 10 | 11 | logging.file=${spring.application.name}.log -------------------------------------------------------------------------------- /spring_cloud_in_action/zipkin-server/src/main/java/com/didispace/ZipkinApplication.java: -------------------------------------------------------------------------------- 1 | package com.didispace; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | import zipkin.server.EnableZipkinServer; 6 | 7 | @EnableZipkinServer 8 | @SpringBootApplication 9 | public class ZipkinApplication { 10 | 11 | public static void main(String[] args) { 12 | SpringApplication.run(ZipkinApplication.class, args); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /spring_cloud_in_action/zipkin-server/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | spring.application.name=zipkin-server 2 | server.port=9411 3 | 4 | #eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/ 5 | --------------------------------------------------------------------------------