1.什麼是springcloud?
springCloud是基於SpringBoot的一整套實現微服務的框架。他提供了微服務開發所需的配置管理、服務發現、斷路器、智能路由、微代理、控制總線、全局鎖、決策競選、分佈式會話和集羣狀態管理等組件。最重要的是,跟spring boot框架一起使用的話,會讓你開發微服務架構的雲服務非常好的方便。 SpringBoot旨在簡化創建產品級的 Spring 應用和服務,簡化了配置文件,使用嵌入式web服務器,含有諸多開箱即用微服務功能。
SpringCloud的關鍵技術介紹:
- eureka 服務註冊與發現
- zuul api網關 即爲服務
- config 分佈式統一配置中心
- Ribbon 負載均衡組件
- hystrix 熔斷
- Feign 聲明式服務調用
2.springcloud的優點是什麼?
- 降低系統的耦合性
- 能獨立上線,迅速響應需求
- 可以支持不同語言不同平臺開發。
3.服務發現eureka?
eureka 是分佈式註冊中心,所有的服務的消費者與服務的提供者都在eureka上進行註冊,這樣就可以實現相互間的隔離。
4.案例
搭建eureka server
4.1在idea或者sts上建立一個springboot 項目,勾選eureka maven依賴。
4.2 在你的xxxApplication中增加@EnableEurekaServer註解
4.3 修改application.properties 或者aplication.yml配置文件
server.port=8080
spring.application.name=eurekaserver1
啓動過程中可能會報錯: Cannot execute request on any known server 這個是正常的。
這樣一個簡單的eurekaserver就啓動起來了。
如何去驗證它?
訪問
http://127.0.0.1:8080/
如圖所示:
服務的提供者
那麼接下來我們再來創建一個服務的提供者
4.4同樣在idea或者sts上建立一個springboot 項目,勾選【Eureka Discovery】和【Web】依賴。
4.5在XXXAplication中增加@EnableDiscoveryClient註解
4.6新建一個XyfController用於測試
4.7application配置文件
server.port=8081
spring.application.name=restservice1
eureka.client.serviceUrl.defaultZone=http://127.0.0.1:8080/eureka/
Controller文件:
@RestController
@RequestMapping("/xyf")
public class XyfController {
@RequestMapping("/hello")
public String hello()
{
return "hello";
}
}
啓動後嘗試訪問http://127.0.0.1:8081/xyf/hello
訪問成功
服務的消費者
接下來再來創建一個服務的消費者
4.8同樣在idea或者sts上建立一個springboot 項目,勾選【Eureka Discovery】和【Web】以及【Ribbon】依賴。
4.5在XXXAplication中增加@EnableDiscoveryClient註解
4.6在XXXApplication中加入一個提供RestTemplate的Bean的方法
4.7application配置文件
server.port=8082
spring.application.name=testweb1
eureka.client.serviceUrl.defaultZone=http://127.0.0.1:8080/eureka/
4.8編寫TestController進行測試
@RestController
@RequestMapping("/test")
public class TestController {
@Autowired
private RestTemplate restTemplate;
@RequestMapping(value="index",method=RequestMethod.GET)
public String index()
{
return restTemplate.getForEntity("http://restservice1/xyf/hello",String.class).getBody();
}
}
4.9編寫完畢後啓動服務的消費者訪問
http://127.0.0.1:8082/test/index
我們通過服務的消費者的接口=>查詢eureka服務器server中服務的提供者的位置=>返回服務消費者。
不能通過普通的HttpClient等發這種請求,只能通過消費者RestTemplate等內置接口來訪問。
架構圖:
需注意的地方:
EurekaServer的端口要固定,因爲別人都向他註冊;Web服務器的端口要固定,因爲用戶要訪問他;服務提供者的端口可以隨意,因爲別人都不是直接和他打交道。設定:eureka.instance.instance-id={random.int} 確保實例不重名。