# 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. 系统架构

架构要点:
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服务器

在浏览器输入`http://zuul:9001/customer/pao/accounts?region=CN` 完成登录(user/user),授权zuul访问资源
 
在浏览器输入`http://zipkinserver:9410/zipkin`,登录zipkin服务器,查看微服务调用链路
