1 RestTemplate
RestTemplate提供了多種便捷訪問遠端Http服務的方法,
是一種簡單便捷的訪問restful服務模板類,是Spring提供的用於訪問Rest服務的客戶端模板工具集
官網地址:https://docs.spring.io/spring-framework/docs/6.0.11/javadoc-api/org/springframework/web/client/RestTemplate.html
常用介面:
-
getForObject:返回物件為響應體中資料轉化成的物件,基本上可以理解為Json
-
getForEntity:返回物件為ResponseEntity物件,包含了響應中的一些重要資訊,比如響應頭、響應狀態碼、響應體等
-
postForObject
-
postForEntity
GET請求方法:
<T> T getForObject(String url, Class
<T> T getForObject(String url, Class
<T> T getForObject(URI url, Class
<T> ResponseEntity
<T> ResponseEntity
<T> ResponseEntity
POST請求方法:
<T> T postForObject(String url, @Nullable Object request, Class
<T> T postForObject(String url, @Nullable Object request, Class
<T> T postForObject(URI url, @Nullable Object request, Class
<T> ResponseEntity
<T> ResponseEntity
<T> ResponseEntity
透過容器注入編寫配置類:
@Configuration
public class RestTemplateConfig
{
@Bean
public RestTemplate restTemplate()
{
return new RestTemplate();
}
}
2 Idea中調整Java語法版本
project structure -> modules -> sources -> language level
3 Consul
-
為什麼要使用consul
微服務所在的IP地址和埠號硬編碼存在非常多的問題:IP和埠變化、無法實現負載均衡、維護複雜
應該怎麼做:服務名固定,路徑不固定
-
什麼是Consul
開源的分散式服務發現與配置管理系統,由HashiCorp公司用Go語言開發
-
consul安裝、下載和執行
- 下載:http://consul.io -> downloads -> 選擇相應的版本
- 安裝:解壓即可
- 執行:在根路徑下輸入命令
consul agent -dev
- 驗證:訪問http://localhost:8500
-
註冊
-
啟動consul
-
新增依賴如下
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-consul-discovery</artifactId> <exclusions> <exclusion> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId>//用於排除衝突提示 </exclusion> </exclusions> </dependency>
-
修改配置
spring: application: name: cloud-consumer-order ####Spring Cloud Consul for Service Discovery cloud: consul: host: localhost port: 8500 discovery: service-name: ${spring.application.name} prefer-ip-address: true #優先使用服務ip進行註冊
-
在RestTemplateConfig的方法上新增負載均衡的註解
@Configuration public class RestTemplateConfig { @Bean @LoadBalanced // 開啟負載均衡 public RestTemplate restTemplate() { return new RestTemplate(); } }
-
4 三個註冊中心的異同點
前置概念 | 評判標準:CAP,即Consistency強一致性、Availability可用性、Partition tolerance分割槽容錯性
-
AP架構(Eureka)
-
當網路分割槽出現後,為了保證可用性,系統B可以返回舊值,保證系統的可用性。
-
當資料出現不一致時,雖然A, B上的註冊資訊不完全相同,但每個Eureka節點依然能夠正常對外提供服務,這會出現查詢服務資訊時如果請求A查不到,但請求B就能查到。如此保證了可用性但犧牲了一致性結論:違背了一致性C的要求,只滿足可用性和分割槽容錯,即AP
-
-
CP架構(Zookeeper/Consul)
- 當網路分割槽出現後,為了保證一致性,就必須拒接請求,否則無法保證一致性,Consul 遵循CAP原理中的CP原則,保證了強一致性和分割槽容錯性,且使用的是Raft演算法,比zookeeper使用的Paxos演算法更加簡單。雖然保證了強一致性,但是可用性就相應下降了,例如服務註冊的時間會稍長一些,因為 Consul 的 raft 協議要求必須過半數的節點都寫入成功才認為註冊成功 ;在leader掛掉了之後,重新選舉出leader之前會導致Consul 服務不可用。結論:違背了可用性A的要求,只滿足一致性和分割槽容錯,即CP
Eureka只能進行服務註冊,而Consul不僅可以註冊還可以分散式配置
5 consul分散式配置
-
新增依賴
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-consul-config</artifactId> <exclusions> <exclusion> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-bootstrap</artifactId> </dependency>
-
新增配置 bootstrap.yml
-
區別:
- application.yml 使用者級的資源配置項
- bootstrap.yml 系統級的 優先順序更高
-
spring: application: name: cloud-payment-service ####Spring Cloud Consul for Service Discovery cloud: consul: host: localhost port: 8500 discovery: service-name: ${spring.application.name} config: profile-separator: '-' # default value is ',' format: yaml
-
將相關內容從application.yml中刪去
-
-
Consul新增配置
- Kay/Value 下建立資料夾config(建立時以/結尾識別為資料夾),然後建立三個子資料夾**-prod、**-dev、**分別表示釋出環境、開發環境、預設環境,**表示服務名
- 接著在各個子資料夾中新增data配置檔案 配置相關資訊