# springcloud-demo
**Repository Path**: tree3170/springcloud-demo
## Basic Information
- **Project Name**: springcloud-demo
- **Description**: springclouddemo示例:eureka、feign、ribbton、zuul、config、hystrix等
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2019-07-06
- **Last Updated**: 2021-03-07
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# spring-cloud-demo
## 1. 启动高可用eureka集群:eureka-server
* 添加jar包
```xml
org.springframework.cloud
spring-cloud-dependencies
Finchley.RELEASE
pom
import
org.springframework.cloud
spring-cloud-starter-netflix-eureka-server
```
* @EnableEurekaServer
* 配置
```yaml
# 设置端口
server:
port: 1111
# 设置hostname
eureka:
server:
enable-self-preservation: false #关闭自我保护
#eviction-interval-timer-in-ms: 1000 #续期时间,即扫描失效服务的间隔时间
instance:
hostname: localhost
non-secure-port: ${server.port}
prefer-ip-address: true
client:
# 由于注册中心是用于维护服务实例,它并不需要检索服务,所以设置为false
fetch-registry: false
# 由于该应用是eureka-server,是注册中心,故不需要注册自己到注册中心
register-with-eureka: false
# service url指向其他eureka节点,如peer2
service-url:
defaultZone: http://peer1:1111/eureka/
```
* 访问:
## 2 启动高可用服务:user-service
* pom
```xml
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
```
* 注解并注入resttemlate
EnableDiscoveryClient
```java
@Bean
@LoadBalanced
Resttemplate restTemplate(){
return new Resttemplate();
}
```
* 配置
```yaml
eureka:
client:
service-url:
# defaultZone: http://peer1:1111/eureka/,http://peer2:1112/eureka/
defaultZone: http://localhost:1111/eureka/
```
* 运行
java -jar user-service-0.0.1-SNAPSHOT.jar --server.port=8081
java -jar user-service-0.0.1-SNAPSHOT.jar --server.port=8082
* 访问eureka server
* 访问controller
## 3 启动consumer: ribbon-consumer
* pom依赖
```xml
org.springframework.cloud
spring-cloud-starter-openfeign
com.google.guava
guava
```
* 启动discovery:@EnableDiscoveryClient
* 启动feign:@EnableFeignClients
* 使用方式一:resttemplate
** 1. ribbon, 利用restTemplate
```
http://localhost:9000/ribbon/hello-ribbon
```
多次请求,查看是否user-service是否落在台服务器(ribbon默认采用轮询)
* 方式二:feign
** 添加FeignClient的service interface
@FeignClient
* 2. 实现Feign并带有hystrix的熔断(测试熔断可以关闭服务方User-Service)
```
http://localhost:9000/ribbon/hello-feign
```
注意:
```
#fall back需要开启hystrix
feign:
hystrix:
enabled: true
```
* 访问
* 获取ribbon的server :http://192.168.1.101:9000/ribbon/servers
```json
[
{
"instanceInfo": {
"hostName": "192.168.1.101",
"overriddenStatus": "UNKNOWN",
"lastUpdatedTimestamp": 1615091596156,
"metadata": {
"management.port": "8081"
},
"healthCheckUrl": "http://192.168.1.101:8081/actuator/health",
"statusPageUrl": "http://192.168.1.101:8081/actuator/info",
"appName": "USER-SERVICE",
"vipAddress": "user-service",
"secureVipAddress": "user-service",
"leaseInfo": {
"renewalIntervalInSecs": 30,
"evictionTimestamp": 0,
"durationInSecs": 90,
"serviceUpTimestamp": 1615091596156,
"registrationTimestamp": 1615091596156
},
"lastDirtyTimestamp": 1615091596100,
"homePageUrl": "http://192.168.1.101:8081/",
"version": "unknown",
"ipAddr": "192.168.1.101",
"countryId": 1,
"sid": "na",
"securePort": 443,
"actionType": "ADDED",
"instanceId": "192.168.1.101:user-service:8081",
"dataCenterInfo": {
"name": "MyOwn"
},
"port": 8081,
"isCoordinatingDiscoveryServer": false,
"status": "UP"
},
"port": 8081,
"zone": "defaultZone",
"host": "192.168.1.101",
"id": "192.168.1.101:8081",
"readyToServe": true
}
]
```
## 4 启动zuul网关:
http://localhost:3001/baidu
1. 读取spring cloud zuul包中的spring.factories文件, 加载ZuulServerAutoConfiguration,ZuulProxyAutoConfiguration
2. 初始化zuulHandlerMapping、RouteLocator、zuulController
前面提到,所以路由请求都会被控制器ZuulControoler拦截到,最终交由ZuulServlet来处理,核心处理代码如下:
3.ZuulServlet实现pre、route、post
参考:
[spring-cloud-zuul原理解析](https://segmentfault.com/a/1190000015915402)
4. 源码解析参考:有道云笔记--》springcloud--》《Zuul源码分析》
## 5. Feign
a. 添加依赖
```
org.springframework.cloud
spring-cloud-starter-openfeign
com.google.guava
guava
```
b. 允许Feign
```
@EnableFeignClients
#fall back需要开启hystrix
feign:
hystrix:
enabled: true
```
c. 使用方法参考类:
```
UserFeignService
UserFeignServiceFallbackFactory
打开客户端Feign调用日志, 同时日志要开启
FullLogConfiguration
```