springcloud
eureka
eureka的作用
消費者該如何獲取服務提供者具體信息?
服務提供者啟動時向eureka注冊自己的信息,eureka保存這些信息消費者,根據服務名稱向eureka拉取提供者信息
如果有多個服務提供者,消費者該如何選擇?
服務消費者利用負載均衡算法,從服務列表中挑選一個消費者如何感知服務提供者健康狀態?
eureka配置
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
server:port: 10086
eureka:client:service-url:defaultZone: http://127.0.0.1:10086/eureka/
Ribbon負載均衡原理
IRule是指定負載均衡的策略
通過定義IRule實現可以修改負載均衡規則,有兩種方式:
1.代碼方式:在order-service中的OrderApplication類中,定義一個新的lRule:
@BeanpublicIRulee randomRule(){return newRandomRule();
}
2.配置文件方式:在order-service的application.yml文件中
添加新的配置也可以修改規則:
userservice:ribbon:NFLoadBalancerRuleClassName:com.netflix.loadbalancer.RandomRule # 負載均衡規則NFLoadBalancerRuleClassName:com.alibaba.cloud.nacos.ribbon.NacosRule # nacos的負載均衡規則
饑餓加載
Ribbon默認是采用懶加載,即第一次訪問時才會去創建LoadBalanceClient,請求時間會很長。
而饑餓加載則會在項目啟動時創建,降低第一次訪問的耗時,通過下面配置開啟饑餓加載:
ribbon:eager-load:enabled:true #開啟饑餓加載clients:- userservice # 指定對userservice這個服務饑餓加載
Nacos
Github地址 https://github.com/alibaba/nacos
window 進入bin目錄后 啟動命令 startup.cmd -m standalone
父工程進入nacok
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>2.2.5.RELEASE</version><type>pom</type><scope>import</scope></dependency>
客戶端依賴
<!-- nacos客戶端依賴包-->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
spring:cloud:nacos:server-addr: localhost:8848discovery:cluster-name: 集群名稱namespace: 環境的idephemeral: false 設置為非臨時實例
根據權重負載均衡
Nacos控制臺可以設置實例的權重值,0~1之間同集群內的多個實例,權重越高被訪問的頻率越高權重,設置為0則完全不會被訪問
環境隔離
Nacos中服務存儲和數據存儲的最外層都是一個名為namespace的東西,用來做最外層隔離
每個namespace下的服務不可見
統一配置管理
<!-- nacos配置管理客戶端依賴包-->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
在userservice中的resource目錄添加一個bootstrap.yml文件,這個文件是引導文件,優先級高于application.yml
spring:application:name:userservice #服務名稱profiles:active:dev #開發環境,這里是devcloud:nacos:server-addr:LocaLhost:8848 #Nacos地址config:file-extension:yam #文件后綴名
配置完之后項目啟動后會去找id是 name+active+file-extension
配置熱更新
在類上面添加注解@RefreshScope或者@ConfigurationProperties注解
@Component@ConfigurationProperties(prefix ="pattern")public class PatternProperties{private String dateformat;}
多環境共享配置
配置優先級
服務名-Rrofile.yaml>服務名稱.yaml>本地配置
Nacos 集群

https://blog.csdn.net/weixin_51265669/article/details/137127998
Nacos與eureka對比
1.Nacos與eureka的共同點
- 都支持服務注冊和服務拉取
- 都支持服務提供者心跳方式做健康檢測
2.Nacos與Eureka的區別
- Nacos支持服務端主動檢測提供者狀態:臨時實例采用心跳模式,非臨時實例采用主動檢測模式
- 臨時實例心跳不正常會被剔除,非臨時實例則不會被剔除
- Nacos支持服務列表變更的消息推送模式,服務列表更新更及時
- Nacos集群默認采用AP方式,當集群中存在非臨時實例時,采用CP模式;Eureka采用AP方式
Feign
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
@Feignclient("userservice")
public interface UserClient {@GetMapping("/user/{id}")User findById(@PathVariable("id") Long id);
}
自定義配置
feign的性能優化
Gateway

<!--網關依賴--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<!--nacos服務發現依賴-->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
路由斷言工廠
過濾器工廠
如果要對所以路由都生效,則可以把過濾工廠寫到default下
全局過濾器
全局過濾器GlobalFilter全局過濾器的作用也是處理一切進入網關的請求和微服務響應,與GatewayFilter的作用一樣。區別在于GatewayFilter通過配置定義,處理邏輯是固定的。而GlobalFilter的邏輯需要自己寫代碼實現。

當過濾器的order值一樣時,會按照defaultFilter>路由過濾器>GlobalFilter的順序執行。
跨域配置
而GlobalFilter的邏輯需要自己寫代碼實現。
當過濾器的order值一樣時,會按照defaultFilter>路由過濾器>GlobalFilter的順序執行。