中文社區:http://springcloud.cn/
私人git下載地址:https://github.com/yunzhi98/springcloud.git
1,Eureka:註冊中心 github代碼地址 (github.com/yunzhi98/springcloud/microservicecloud-eureka-7001)
客戶端集羣
1.1,pom引入 <!--eureka-server服務端 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>
1.2 註解啓動
@SpringBootApplication
@EnableEurekaServer // EurekaServer服務器端啓動類,接受其它微服務註冊進來
public class EurekaServer7001_App
{
public static void main(String[] args)
{
SpringApplication.run(EurekaServer7001_App.class, args);
}
}
2,Eureka 服務提供 代碼地址(github.com/yunzhi98/springcloud/microservicecloud-provider-dept-8001)
2.1 pom,引入
<!-- 將微服務provider側註冊進eureka -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
2.2 啓動類及註解
@SpringBootApplication
@EnableEurekaClient //本服務啓動後會自動註冊進eureka服務中
@EnableDiscoveryClient //服務發現
public class DeptProvider8001_App
{
public static void main(String[] args)
{
SpringApplication.run(DeptProvider8001_App.class, args);
}
}
2.3監控信息完善
<!-- actuator監控信息完善 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
2.31主pom設定過濾監控配置,在src/main/resources下過濾$開始於結尾的配置
在yml下info的設定.
<build>
<finalName>microservicecloud</finalName>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<configuration>
<delimiters>
<delimit>$</delimit>
</delimiters>
</configuration>
</plugin>
</plugins>
</build>
3, 客戶端集羣,及服務發現 eureka-server服務端集羣配置
(github.com/yunzhi98/springcloud/microservicecloud-eureka-7001, github.com/yunzhi98/springcloud/microservicecloud-eureka-7002, github.com/yunzhi98/springcloud/microservicecloud-eureka-7003)
3.1 yml配置記錄除本機外的其他集羣服務機器地址
7001:defaultZone: http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/
7002:defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7003.com:7003/eureka/
7003:defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/
3.2 引用端2中yml中記錄集羣的全部機器地址
eureka: client: #客戶端註冊進eureka服務列表內
service-url:
defaultZone: http://eureka7001.com:7001/eureka/,
http://eureka7002.com:7002/eureka/,
http://eureka7003.com:7003/eureka/
4,客戶端負載均衡(Ribbon) ,消費端調用代碼地址(github.com/yunzhi98/springcloud/microservicecloud-consumer-dept-80)
4.1,pom配置 <!-- Ribbon相關 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-ribbon</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
4.2,客戶端代理指向集羣服務yml配置
eureka client:
register-with-eureka: false
defaultZone:http://eureka7001.com:7001/eureka/,
http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/
4.3,對客戶端代理RestTemplate進行Ribbon註解
@Bean
@LoadBalanced//Spring Cloud Ribbon是基於Netflix Ribbon實現的一套客戶端 負載均衡的工具。
public RestTemplate getRestTemplate()
{
return new RestTemplate();
}
4.4,集羣訪問算法,自定義實現RandomRule_ZY.class 加入啓動applicaltionClassPath 的ben中.
@Bean
public IRule myRule()
{
return new RetryRule();//達到的目的,用我們重新選擇的隨機算法替代默認的輪詢。
}
注意:
@RibbonClient(name="MICROSERVICECLOUD-DEPT",configuration=MySelfRule.class)
官網提示不能和主啓動類同包
5,服務端集羣配置,及服務註冊
(github.com/yunzhi98/springcloud/microservicecloud-provider-dept-8001, github.com/yunzhi98/springcloud/microservicecloud-provider-dept-8002, github.com/yunzhi98/springcloud/microservicecloud-provider-dept-8003)
5.1 yml配置
eureka:client: #客戶端註冊進eureka服務列表
http://eureka7001.com:7001/eureka/,
http://eureka7002.com:7002/eureka/,
http://eureka7003.com:7003/eureka/
instance:
instance-id: microservicecloud-dept8002 #自定義服務名稱信息
prefer-ip-address: true #訪問路徑可以顯示IP地址
5.2啓動類配置
@SpringBootApplication
@EnableEurekaClient //本服務啓動後會自動註冊進eureka服務中
@EnableDiscoveryClient //服務發現
public class DeptProvider8002_App
{
public static void main(String[] args)
{
SpringApplication.run(DeptProvider8002_App.class, args);
}
}
6,客戶端負載均衡(Feign) ,Feign面向webService接口消費端調用代碼地址(github.com/yunzhi98/springcloud/microservicecloud-consumer-dept-feign)
6.1,依賴導入
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-feign</artifactId>
</dependency>
6.2,只需要對定義接口和微服務名稱進行註解綁定
@FeignClient(value = "MICROSERVICECLOUD-DEPT",
fallbackFactory=DeptClientServiceFallbackFactory.class)
public interface DeptClientService{
@RequestMapping(value = "/dept/get/{id}", method = RequestMethod.GET)
public Dept get(@PathVariable("id") long id);
}
6.3,Controlle注入接口註解調用
@Autowired
private DeptClientService service;
7,Hystrix(斷路器/熔斷/降級 github.com/yunzhi98/springcloud/microservicecloud-provider-dept-hystrix-8001)
7.1,maven依賴引用
<!-- hystrix -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix</artifactId>
</dependency>
7.2,註解主啓動程序服務器
@SpringBootApplication
@EnableEurekaClient //本服務啓動後會自動註冊進eureka服務中
@EnableDiscoveryClient //服務發現
@EnableCircuitBreaker//對hystrixR熔斷機制的支持
public class DeptProvider8001_Hystrix_App
{
public static void main(String[] args)
{
SpringApplication.run(DeptProvider8001_Hystrix_App.class, args);
}
}
7.3,在Controller方法添加@HystrixCommand(fallbackMethod = "processHystrix_Get")註解,實現熔斷返回.
7.4,利用spring的面向切面解耦,返回服務降級的公用提示.
@Component // 不要忘記添加
public class DeptClientServiceFallbackFactory implements FallbackFactory<DeptClientService>
{
}
7.5,對於服務端集羣而言,某個服務因資源不夠而關閉,但爲了防止客戶端調用的積壓,而降級處理,返回服務說明.
而對於可預判的異常直接熔斷,避免超時損耗服務資源.
8,準實時調用監控(Hystrix Dshboard github.com/yunzhi98/springcloud/microservicecloud-consumer-hystrix-dashboard)
8.1,maven依賴引用
<!-- hystrix和 hystrix-dashboard相關 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix-dashboard</artifactId>
</dependency>
8.2,主程序註解關聯
@SpringBootApplication
@EnableHystrixDashboard
public class DeptConsumer_DashBoard_App
{
public static void main(String[] args)
{
SpringApplication.run(DeptConsumer_DashBoard_App.class, args);
}
}
8.3,啓動Hystrix Dshboard 進入豪豬頁面,直接輸入服務地址,檢索該服務的調用情況.
9,zuul路由網關的過濾.
9.1maven依賴
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zuul</artifactId>
</dependency>
9.2,主啓動類註解關聯( github.com/yunzhi98/springcloud/microservicecloud-zuul-gateway-9527)
@SpringBootApplication
@EnableZuulProxy
public class Zuul_9527_StartSpringCloudApp
{
public static void main(String[] args)
{
SpringApplication.run(Zuul_9527_StartSpringCloudApp.class, args);
}
}
9.3路由yml過濾配置
zuul:
prefix: /atguigu
ignored-services: "*"
routes:
mydept.serviceId: microservicecloud-dept
mydept.path: /mydept/**
10,SpringCloud分佈式配置中心config使用.( github.com/yunzhi98/springcloud/microservicecloud-config)
10.1,關聯git倉庫配置congif文件信息
spring:
application:
name: microservicecloud-config
cloud:
config:
server:
git:
uri: [email protected]:yunzhi98/microservicecloud-config.git #GitHub上面的git倉庫名字