# spring-cloud-poc **Repository Path**: beyond-prototype/spring-cloud-poc ## Basic Information - **Project Name**: spring-cloud-poc - **Description**: No description available - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2019-05-23 - **Last Updated**: 2022-01-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Spring Cloud Demo ## 1. 简介 本Demo将演示微服务架构中的下列功能 1. [服务注册与发现](spring-cloud-eureka-server/README.md) 2. [负载均衡](spring-cloud-eureka-server/README-ribbon.md) 3. [熔断降级](spring-cloud-hystrix/README.md) 4. [服务网关](spring-cloud-zuul/README.md) 5. [认证鉴权](spring-cloud-oauth2-server/README.md) 6. [链路跟踪](spring-cloud-zipkin/README.md) 本Demo将使用以下框架 1. [Spring Cloud](https://spring.io/projects/spring-cloud#overview) : Finchley.SR2 2. [Spring Boot](https://spring.io/projects/spring-boot) : 2.0.6.RELEASE 3. [Spring Cloud Netflix Eureka](https://spring.io/projects/spring-cloud-netflix) : 2.0.2.RELEASE 4. [Spring Cloud Netflix Ribbon](https://spring.io/projects/spring-cloud-netflix) : 2.0.2.RELEASE 5. [Spring Cloud Netflix Hystrix](https://spring.io/projects/spring-cloud-netflix) : 2.0.2.RELEASE 6. [Spring Cloud Netflix Zuul](https://spring.io/projects/spring-cloud-zuul) : 2.0.2.RELEASE 7. [Spring Security OAuth2](https://projects.spring.io/spring-security-oauth/docs/oauth2.html) : 2.0.2.RELEASE 7. [Zipkin](https://zipkin.io/) : 2.11.11 ## 2. 系统架构 ![eureka-peer-region-zone-architecture](spring-cloud-eureka-server/image/eureka-peer-region-zone-architecture-01.png) 架构要点: 1. 两地(region:GZ, SZ)三中心(zone:GZ1, GZ2, SZ1)的高可用架构 2. 每个中心部署一个Eureka Server供同个中心的服务注册与发现 3. 所有Eureka Server在对等模式(peer mode)下运行,服务注册信息可以复制到所有的Eureka Server 4. 每个中心都有account-service(服务提供方)实例注册在该中心的Eureka Server,所有实例将会被customer-service(服务消费方)实例调用 5. customer-service实例只在注册在GZ2中心的Eureka Server,默认情况下只调用GZ2中心的account-service实例 6. customer-service使用负载均衡器调用account-service实例,使用VIPhttp://account-service/ 7. 如果GZ2中心的account-service实例可用,customer-service将优先调用GZ2中心的account-service实例,避免跨中心跨地区的服务调用 8. customer-service使用负载均衡器account_service_gz2调用GZ2中心的account-service_9601和account-service_9602 9. 如果GZ2中心的account-service实例都不可用,customer-service将创建负载均衡器account_service_gz1和account_service_sz1来分别调用GZ1和SZ1中的account-service实例 ## 3. Maven项目配置 在[spring-cloud-poc/pom.xml](pom.xml)中配置使用的框架版本 ```xml 1.8 Finchley.SR2 2.0.6.RELEASE 2.0.2.RELEASE ``` 创建相应的模块 ```xml spring-cloud-eureka-server spring-cloud-oauth2-server spring-cloud-hystrix spring-cloud-zuul demo-account-service demo-customer-service spring-cloud-zipkin ``` ## 4. 构建项目 ### 4.1. 指定工作区路径,例如 ~/cngit/spring-cloud-poc `export workspace=~/cngit/spring-cloud-poc` ### 4.2. 构建demo-model demo-model定义了在其他模块使用的model bean ``` cd ${workspace}/demo-model mvn dependency:tree mvn clean package install ``` ### 4.3. 构建其他模块 ``` cd ${workspace} mvn dependency:tree mvn clean package install -DskipTests ``` ## 5. 运行项目 ### 5.1. 编辑/etc/hosts,添加以下host `sudo gedit /etc/hosts` 127.0.0.1 es1 127.0.0.1 es2 127.0.0.1 es3 127.0.0.1 zuul 127.0.0.1 customerservice 127.0.0.1 accountservice 127.0.0.1 oauth2server 127.0.0.1 zipkinserver 127.0.0.1 zookeeper 127.0.0.1 kafkaserver 127.0.0.1 esserver ### 5.2. 重启网络 `sudo /etc/init.d/networking restart` ### 5.3. 启动 Eureka Server和服务 ``` export workspace=~/cngit/spring-cloud-poc cd ${workspace} java -Dspring.profiles.active=es1 -jar delivery/spring-cloud-eureka-server-1.0-SNAPSHOT.jar > /dev/null 2>&1 & java -Dspring.profiles.active=es2 -jar delivery/spring-cloud-eureka-server-1.0-SNAPSHOT.jar > /dev/null 2>&1 & java -Dspring.profiles.active=es3 -jar delivery/spring-cloud-eureka-server-1.0-SNAPSHOT.jar > /dev/null 2>&1 & java -Dserver.port=9501 -Dspring.profiles.active=GZ -jar delivery/demo-customer-service-1.0-SNAPSHOT.jar > /dev/null 2>&1 & java -Dserver.port=9502 -Dspring.profiles.active=GZ -jar delivery/demo-customer-service-1.0-SNAPSHOT.jar > /dev/null 2>&1 & java -Dserver.port=9503 -Dspring.profiles.active=SZ -jar delivery/demo-customer-service-1.0-SNAPSHOT.jar > /dev/null 2>&1 & java -Dspring.profiles.active=GZ -Dserver.port=9601 -Ddemo.alwaysException=true -jar delivery/demo-account-service-1.0-SNAPSHOT.jar > /dev/null 2>&1 & java -Dspring.profiles.active=GZ -Dserver.port=9602 -Ddemo.alwaysException=true -jar delivery/demo-account-service-1.0-SNAPSHOT.jar > /dev/null 2>&1 & java -Dspring.profiles.active=SZ -Dserver.port=9603 -Ddemo.alwaysException=false -jar delivery/demo-account-service-1.0-SNAPSHOT.jar > /dev/null 2>&1 & java -Dspring.profiles.active=GZ -Dserver.port=9605 -Deureka.instance.metadata-map.zone=GZ1 -jar delivery/demo-account-service-1.0-SNAPSHOT.jar > /dev/null 2>&1 & java -Dserver.port=9999 -jar delivery/spring-cloud-oauth2-server-1.0-SNAPSHOT.jar > /dev/null 2>&1 & java -Dserver.port=9001 -jar delivery/spring-cloud-zuul-1.0-SNAPSHOT.jar > /dev/null 2>&1 & java -Dserver.port=9410 -jar delivery/spring-cloud-zipkin-1.0-SNAPSHOT.jar > /dev/null 2>&1 & ``` ### 5.4. 登录服务器,调用微服务 在浏览器输入`http://es1:8761/`,登录Eureka服务器 ![eureka-peer-es1](spring-cloud-eureka-server/image/eureka-peer-es1-01.png) 在浏览器输入`http://zuul:9001/customer/pao/accounts?region=CN` 完成登录(user/user),授权zuul访问资源 ![SSO](spring-cloud-zuul/image/oauth2-login-01.png) ![Authorization](spring-cloud-zuul/image/oauth2-confirm-access-01.png) 在浏览器输入`http://zipkinserver:9410/zipkin`,登录zipkin服务器,查看微服务调用链路 ![zipkin server](spring-cloud-zipkin/image/zipkin-ui-00.png)