# 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 ```