注册服务 | 实例 | 主机 | 端口 | 说明 | 访问地址 |
---|---|---|---|---|---|
EUREKASERVER | EurekaServer1 | ek1.com | 9001 | eureka服务1 | http://ek1.com:9001 |
EUREKASERVER | EurekaServer2 | ek2.com | 9002 | eureka服务2 | http://ek2.com:9002 |
SCSERVER | sc-server1 | scServer1 | 8001 | 远端服务1 | 动作:http://scserver1:8001/user/getName 手工下线:http://scserver1:8001/health/adjust?status=down |
SCSERVER | sc-server2 | scServer2 | 8002 | 远端服务2 | 动作:http://scserver2:8001/user/getName |
SCCLIENT1 | sc-client1 | scclient1 | 7001 | 客户端服务1; 支持RestTemplate,Feign通过Ribbon负载均衡调用远端服务; 支持Hystrix服务容错治理、监控等 |
http://scclient1:7001/test/getUserNameByFeign http://scclient1:7001/test/getUserNameByRestTemplate http://scclient1:7001/hystrix http://scclient1:7001/actuator/hystrix.stream |
SCCLIENT2 | sc-client2 | scclient2 | 7002 | 客户端服务2 | 支持从config配置中心获取配置; 测试操作:http://scclient2:7002/test/getConfig |
SCGATEWAY | sc-gateway | scgateway | 8888 | zuul网关服务;支持限流等 | http://scgateway:8888/scclient1/test/getUserNameByFeign http://scgateway:8888/scserver/user/getName 开启前缀访问:http://scgateway:8888/api/v1/scserver/user/getName 路由监控:http://scgateway:8888/actuator/routes |
SCCONFIG | sc-config | scconfig | 9999 | 配置中心 | 配置从本地读取:http://scconfig:9999/scClient2/local 配置从git读取:http://scconfig:9999/netflix/scClient2-local.properties |
SCADMIN | sc-admin | scadmin | 8080 | Spring Boot Admin; 支持邮件、钉钉告警; TODO 支持集成logback实时显示日志等 |
http://scadmin:8080/wallboard |
- | - | sczipkin | 9411 | zipkin链路跟踪 | http://sczipkin:9411/zipkin |
192.168.0.12 ek1.com 192.168.0.12 ek2.com 192.168.0.12 scServer1 192.168.0.12 scServer2 192.168.0.12 scclient1 192.168.0.12 scclient2 192.168.0.12 scgateway 192.168.0.12 sczipkin 192.168.0.12 scadmin 192.168.0.12 scconfig
192.168.0.12 ek1.com 192.168.0.12 ek2.com
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency>
#服务器端口 server.port=9001 #应用名称,高可用的两个eureka节点必须保持一致 spring.application.name=eurekaServer #eureka多节点配置 #是否注册 eureka.client.enabled=true #是否将自己注册到其他Eureka Server,默认为true需要 eureka.client.register-with-eureka=true #是否从eureka server获取注册信息, 需要 eureka.client.fetch-registry=true #设置服务注册中心的URL,用于client和server端交流 #此节点应向其他节点发起请求 eureka.client.serviceUrl.defaultZone=http://ek2.com:9002/eureka/ #主机名,必填 eureka.instance.hostname=ek1.com #分组名称 #eureka.instance.app-group-name=eurekaServerGroup #是否开启自我保护 eureka.server.enable-self-preservation=true #触发自我保护阀值 eureka.server.renewal-percent-threshold=0.85 #失效服务间隔 eureka.server.eviction-interval-timer-in-ms=6000
#服务器端口 server.port=9002 #应用名称,两个eureka节点必须保持一致 spring.application.name=eurekaServer #eureka多节点配置 #是否将自己注册到其他Eureka Server,默认为true需要 eureka.client.register-with-eureka=true #是否从eureka server获取注册信息, 需要 eureka.client.fetch-registry=true #设置服务注册中心的URL,用于client和server端交流 #此节点应向其他节点发起请求 eureka.client.serviceUrl.defaultZone=http://ek1.com:9001/eureka/ #主机名,必填 eureka.instance.hostname=ek2.com #分组名称 #eureka.instance.app-group-name=eurekaServerGroup management.endpoint.shutdown.enabled=true
@EnableEurekaServer // 启用Eureka服务端
TODO
192.168.0.12 scServer1 192.168.0.12 scServer2
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency>
server.port=8001 spring.application.name=scServer #eureka client config #是否注册 eureka.client.enabled=true #是否将自己注册到其他Eureka Server,默认为true需要 eureka.client.register-with-eureka=true #是否从eureka server获取注册信息, 需要 eureka.client.fetch-registry=true #设置服务注册中心的URL,用于client和server端交流 #重要说明:client默认向配置的第1个server地址注册,第1个注册不成功后再依次向第2个,第3个注册(最多重试3次) eureka.client.serviceUrl.defaultZone=http://ek1.com:9002/eureka/,http://ek2.com:9002/eureka/ #主机名,必填 eureka.instance.hostname=scServer1 #续约发送间隔默认30秒,心跳间隔 eureka.instance.lease-renewal-interval-in-seconds=5 #表示client间隔多久去拉取服务注册信息,默认为30秒,如果要迅速获取服务注册状态,可以缩小该值,比如5秒 eureka.client.registry-fetch-interval-seconds=5 #续约到期时间(默认90秒) eureka.instance.lease-expiration-duration-in-seconds=90 #将实例IP注册到Eureka Server上(多网卡适用,其他服务可通过IP访问) #eureka.instance.prefer-ip-address=true #eureka.instance.ip-address=192.168.0.12 #是否开启健康检测,对应EurekaServer控制台的Status状态 eureka.client.healthcheck.enabled=true
server.port=8002 spring.application.name=scServer #eureka client config #是否注册 eureka.client.enabled=true #是否将自己注册到其他Eureka Server,默认为true需要 eureka.client.register-with-eureka=true #是否从eureka server获取注册信息, 需要 eureka.client.fetch-registry=true #设置服务注册中心的URL,用于client和server端交流 #重要说明:client默认向配置的第1个server地址注册,第1个注册不成功后再依次向第2个,第3个注册(最多重试3次) eureka.client.serviceUrl.defaultZone=http://ek1.com:9002/eureka/,http://ek2.com:9002/eureka/ #主机名,必填 eureka.instance.hostname=scServer2 #续约发送间隔默认30秒,心跳间隔 eureka.instance.lease-renewal-interval-in-seconds=5 #表示client间隔多久去拉取服务注册信息,默认为30秒,如果要迅速获取服务注册状态,可以缩小该值,比如5秒 eureka.client.registry-fetch-interval-seconds=5 #续约到期时间(默认90秒) eureka.instance.lease-expiration-duration-in-seconds=90 #将实例IP注册到Eureka Server上(多网卡适用,其他服务可通过IP访问) #eureka.instance.prefer-ip-address=true #eureka.instance.ip-address=192.168.0.12 #是否开启健康检测,对应EurekaServer控制台的Status状态 eureka.client.healthcheck.enabled=true
说明:
/** * Web配置 * * @author binglang * @date 2021/11/24 10:44 **/ @Configuration public class WebConfig implements WebMvcConfigurer { // 开启负载均衡 @LoadBalanced @Bean public RestTemplate restTemplate() { return new RestTemplate(); } }
/** * 测试RestTemplate服务调用 */ @GetMapping(value = "/getUserNameByRestTemplate") // 整合Hystrix配置服务降级 // @HystrixCommand(fallbackMethod = "fallback") public String getUserNameByRestTemplate() { String serviceUrl = "http://SCSERVER/user/getName"; String username = restTemplate.getForObject(serviceUrl, String.class); return username; }
说明:请参考sc-client1应用代码实现。
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>
@EnableFeignClients
// 二方库sc-common定义服务公共接口 com.binglangaimo.sccommon.service.feign.ICommonUserService // 服务提供方sc-server1,sc-server2必须实现此接口 com.binglangaimo.scserver1.controller.UserController // 服务调用方sc-client1定义带@FeignClient注解接口 com.binglangaimo.scclient1.service.TestFeignService // 服务调用 com.binglangaimo.scclient1.controller.TestController#getUserNameByFeign()
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix</artifactId> </dependency>
@EnableCircuitBreaker // 开启Hystrix断路器
说明:参考sc-client1/src/main/resources/application.properties
#feign配置 #feign调用开启支持hystrix断路器 feign.hystrix.enabled=true
参考代码实现:com.binglangaimo.scclient1.service.TestFeignService
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId> </dependency>
@EnableHystrixDashboard // 开启Hystrix Dashboard
#hystrix配置,不配置会报错,参考:https://www.cnblogs.com/itsharehome/p/15628220.html hystrix.dashboard.proxy-stream-allow-list=scclient1 #actuator监控参数 #开启所有端点(不推荐),生产环境仅开启需要的即可 management.endpoints.web.exposure.include=*
说明:需要被跟踪的服务都需要做以下配置。可参考sc-client1实现。
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-sleuth</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-zipkin</artifactId> </dependency>
#zipkin配置 #zipkin server地址 spring.zipkin.base-url=http://sczipkin:9411/ #采样频率 spring.sleuth.sampler.rate=10
// 下载命令 curl -sSL https://zipkin.io/quickstart.sh | bash -s // 启动zipkin java -jar zipkin.jar
说明:请参考sc-gateway应用实现。
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-zuul</artifactId> </dependency>
sc-gateway/src/main/resources/application.properties
@EnableZuulProxy // 开启Zuul网关
说明:sc-config为配置中心(Config Server);sc-client2支持从配置中心获取配置(Config client)。
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-server</artifactId> </dependency>
重要说明:
server.port=9999 spring.application.name=scConfig #config注册中心配置 #使用local配置 #spring.profiles.active=native #spring.cloud.config.server.native.search-locations=file:xxx/WWW/study/springcloud/config #使用git配置 spring.cloud.config.server.git.uri=git@gitee.com:binglangaimo/springcloud.git spring.cloud.config.server.git.strict-host-key-checking=false spring.cloud.config.server.git.private-key=file:C:/Users/xxx/.ssh/id_rsa #支持从本地文件中读取密钥信息,保证了密钥信息的安全 spring.cloud.config.server.git.ignore-local-ssh-settings=false spring.cloud.config.server.git.default-label=netflix spring.cloud.config.server.git.search-paths=config
@EnableConfigServer
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-client</artifactId> </dependency>
spring.application.name=scClient2 spring.profiles.active=local #从注册中心获取配置 spring.cloud.config.uri=http://scconfig:9999 spring.cloud.config.fail-fast=true
说明:
<dependency> <groupId>de.codecentric</groupId> <artifactId>spring-boot-admin-starter-server</artifactId> </dependency> <dependency> <groupId>de.codecentric</groupId> <artifactId>spring-boot-admin-server-ui</artifactId> </dependency>
server.port=8080 spring.application.name=scAdmin #此处为eureka client公共配置,不重复粘贴了 #此处为actuator公共配置,不重复粘贴了
@EnableAdminServer // 开启Admin监控
com.binglangaimo.scadmin.notify.DingDingNotifier实现类
我的个人gitee-https://gitee.com/binglangaimo/springcloud。(重点申明:代码仅供学习参考使用,未经作者授权,请勿用于商业用途)。