免费爱碰视频在线观看,九九精品国产屋,欧美亚洲尤物久久精品,1024在线观看视频亚洲

      Spring Cloud入門看這一篇就夠了

      Spring Cloud入門看這一篇就夠了

      SpringCloud微服務(wù)

      架構(gòu)演進(jìn)

      • 單體架構(gòu)
      • 垂直拆分
      • 分布式SOA面向服務(wù)架構(gòu)
      • 微服務(wù)架構(gòu)

      服務(wù)調(diào)用方式

      • RPC,早期的webservice,現(xiàn)在熱門的dubbo,都是RPC的典型代表
      • HTTP,HttpClient,OKHttp,URLConnection,RestTemplate

      Euraka服務(wù)注冊(cè)中心

      注冊(cè)中心

    1. 添加依賴
    2. org.springframework.cloudspring-cloud-starter-netflix-eureka-client org.springframework.cloud spring-cloud-starter-netflix-eureka-server

    3. 使用@EnableEurekaServer注解開啟注冊(cè)服務(wù)
    4. @SpringBootApplication@EnableEurekaServerpublic class EurekaServerApplication { public static void main(String[] args) { SpringApplication.run(EurekaServerApplication.class, args); }}

    5. 編寫配置文件application.yml
    6. server: port: 8761eureka: instance: hostname: localhost client: registerWithEureka: false fetchRegistry: false serviceUrl: defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ #是否將自己注冊(cè)到Eureka服務(wù)中,默認(rèn)為true(由于當(dāng)前就是eureka服務(wù),固設(shè)置為false) registerWithEureka: false #設(shè)置是否從eureka服務(wù)上獲取注冊(cè)信息,默認(rèn)為true(由于當(dāng)前就是eureka服務(wù),固設(shè)置為false) fetchRegistry: false server: # 是否開啟自我保護(hù)模式(自我保護(hù)模式,當(dāng)eureka在一定時(shí)間內(nèi)沒有接受到某個(gè)微服務(wù)實(shí)例的心跳包,默認(rèn)90S會(huì)注銷該實(shí)例), # 一旦進(jìn)入自我保護(hù)模式,若短時(shí)間內(nèi)丟失大量客戶端,eureka也會(huì)保護(hù)注冊(cè)表的信息,不再注銷 enable-self-preservation: false # 清理間隔。默認(rèn)為60000ms eviction-interval-timer-in-ms: 5000

      服務(wù)提供者(服務(wù)注冊(cè))

    7. 添加依賴
    8. org.springframework.cloud spring-cloud-starter-netflix-eureka-client </dependency

      2.添加 @EnableDiscoveryClient 來開啟Eureka客戶端功能

      @SpringBootApplication@EnableDiscoveryClientpublic class SpringDemoApplication { public static void main(String[] args) { SpringApplication.run(SpringDemoApplication.class, args); }}

      3.編寫配置文件

      eureka: instance: #在調(diào)用服務(wù)的時(shí)候就已經(jīng)變成ip地址;需要注意的是:不是在eureka中的控制臺(tái)服務(wù)實(shí)例狀態(tài)顯示。 ip-address: 127.0.0.1 prefer-ip-address: true #使用ip注冊(cè) client: # 是否開啟健康檢查 healthcheck: enabled: true # 集群url service-url: defaultZone: http://127.0.0.1:8761/eureka

      服務(wù)消費(fèi)者(服務(wù)發(fā)現(xiàn))

      消費(fèi)應(yīng)用從注冊(cè)中心獲取服務(wù)列表,從而得知每個(gè)服務(wù)方的信息,知道去哪里調(diào)用服務(wù)方

      服務(wù)續(xù)約

      在注冊(cè)服務(wù)完成以后,服務(wù)提供者會(huì)維持一個(gè)心跳(定時(shí)向EurekaServer發(fā)起Rest請(qǐng)求),有兩個(gè)重要參數(shù)可以修改服務(wù)續(xù)約的行為

      eureka: instance: #服務(wù)失效時(shí)間,默認(rèn)值90秒lease-expiration-duration-in-seconds: 90 #服務(wù)續(xù)約(renew)的間隔,默認(rèn)為30秒lease-renewal-interval-in-seconds: 30

      也就是說,默認(rèn)情況下每隔30秒服務(wù)會(huì)向注冊(cè)中心發(fā)送一次心跳,證明自己還活著。如果超過90秒沒有發(fā)送心跳,EurekaServer就會(huì)認(rèn)為該服務(wù)宕機(jī),會(huì)定時(shí)(eureka.server.eviction-interval-timer-in-ms設(shè)定的時(shí)間)從服務(wù)列表中剔除

      失效剔除和自我保護(hù)

      服務(wù)注冊(cè)中心在啟動(dòng)時(shí)會(huì)創(chuàng)建一個(gè)定時(shí)任務(wù),默認(rèn)每隔一段時(shí)間(默認(rèn)為60秒)將當(dāng)前清單中超時(shí)(默認(rèn)為90秒)沒有續(xù)約的服務(wù)剔除。

      Eureka Server在運(yùn)行期間,會(huì)統(tǒng)計(jì)心跳失敗的比例在15分鐘之內(nèi)是否低于85%,如果出現(xiàn)低于的情況,Eureka Server會(huì)將當(dāng)前的實(shí)例注冊(cè)信息保護(hù)起來,不再刪除服務(wù)注冊(cè)表中的數(shù)據(jù)(也就是不會(huì)注銷任何微服務(wù))

      Consul

      特性

      • 高效的Raft一致性算法
      • 支持多數(shù)據(jù)中心
      • 支持健康檢查
      • HTTP和DNS支持

      Consul和Eureka的區(qū)別:

      • Consul強(qiáng)一致性(CP),Eureka保證高可用和最終一致性(AP)
      • Consul使用Go語言,Eureka使用Java語言
      • Consul 不同于 Eureka 需要單獨(dú)安裝,官網(wǎng):https://www.consul.io/downloads

      Consul架構(gòu)圖

      Consul基本使用

      服務(wù)提供者

    9. pom.xml添加依賴
    10. org.springframework.cloudspring-cloud-starter-consul-discovery org.springframework.bootspring-boot-starter-actuator

    11. 通過@EnableDiscoveryClient注解開啟對(duì)服務(wù)發(fā)現(xiàn)的支持
    12. 編寫配置文件application.yml
    13. spring: application: name: consul-provider ####consul注冊(cè)中心地址 cloud: consul: host: localhost port: 8500 discovery: service-name: ${spring.application.name} #注冊(cè)中心名字與spring的應(yīng)用名稱一致 #—————————–相關(guān)配置—————————-| #是否注冊(cè) register: true #實(shí)例ID instance-id: ${spring.application.name}-1 #服務(wù)實(shí)例名稱 service-name: ${spring.application.name} #服務(wù)實(shí)例端口 port: ${server.port} #健康檢查路徑 healthCheckPath: /actuator/health #健康檢查時(shí)間間隔 healthCheckInterval: 15s #開啟ip地址注冊(cè) prefer-ip-address: true #實(shí)例的請(qǐng)求ip ip-address: ${spring.cloud.client.ip-address}

      服務(wù)消費(fèi)者

    14. pom.xml添加依賴
    15. org.springframework.cloudspring-cloud-starter-consul-discovery

    16. 編寫配置文件application.yml
    17. spring: application: name: consul-provider ####consul注冊(cè)中心地址 cloud: consul: host: localhost port: 8500 discovery: #設(shè)置不需要注冊(cè)到Consul中 register: false

      負(fù)載均衡Ribbon

      Ribbon是 Netflix 發(fā)布的一個(gè)負(fù)載均衡器,有助于控制 HTTP 和 TCP客戶端行為。Ribbon自動(dòng)的從注冊(cè)中心中獲取服務(wù)提供者的

      列表信息,并基于內(nèi)置的負(fù)載均衡算法,請(qǐng)求服務(wù)。

      搭建過程

    18. 啟動(dòng)兩個(gè)服務(wù)實(shí)例
    19. 先編寫請(qǐng)求的接口

      @Value(“${spring.cloud.client.ip-address}”)private String ip;@Value(“${server.port}”)private String port;@ResponseBody@RequestMapping(value = “backInfo”, method = RequestMethod.GET)public String backInfo() {return “調(diào)用的是” + ip + “端口是:” + port;}

      我們假設(shè)搭建兩臺(tái)服務(wù)提供者,端口分別為:8090和8091,將已有服務(wù)的配置更改為

      server: #的${}表示在jvm啟動(dòng)時(shí)候若能找到對(duì)應(yīng)port則使用,若無則使用后面的默認(rèn)值port: ${port:8090}

      另外一臺(tái)在啟動(dòng)的時(shí)候可以指定端口port,在如下界面中的 VM options 中設(shè)置 -Dport=10087

    20. 啟動(dòng)負(fù)載均衡
    21. 因?yàn)镋ureka中已經(jīng)集成了Ribbon,所以我們無需引入新的依賴。直接修改消費(fèi)者的啟動(dòng)類

      @Bean@LoadBalancedpublic RestTemplate restTemplate() {return new RestTemplate();}

    22. 調(diào)取服務(wù)提供者接口,頁面進(jìn)行測(cè)試,可以分別請(qǐng)求到8090和8091兩個(gè)端口
    23. @Autowiredprivate RestTemplate restTemplate;@ResponseBody@RequestMapping(value = “getIpAndPort”, method = RequestMethod.GET)public String printInfo() {String url = “http://springbootdemo/backInfo”;return restTemplate.getForObject(url, String.class);}

      負(fù)載均衡策略

      Ribbon默認(rèn)的負(fù)載均衡策略是輪詢,Ribbon內(nèi)置了多種負(fù)載均衡策略

      修改負(fù)載均衡規(guī)則的配置:

      springbootdemo: ribbon: NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule #格式是: {服務(wù)名稱}.ribbon.NFLoadBalancerRuleClassName

      • com.netflix.loadbalancer.RoundRobinRule :以輪詢的方式進(jìn)行負(fù)載均衡。
      • com.netflix.loadbalancer.RandomRule :隨機(jī)策略
      • com.netflix.loadbalancer.RetryRule :重試策略
      • com.netflix.loadbalancer.WeightedResponseTimeRule :權(quán)重策略
      • com.netflix.loadbalancer.BestAvailableRule :最佳策略
      • com.netflix.loadbalancer.AvailabilityFilteringRule :可用過濾策略

      策略選擇:

    24. 如果每個(gè)機(jī)器配置一樣,則建議不修改策略 (推薦)
    25. 如果部分機(jī)器配置強(qiáng),則可以改為 WeightedResponseTimeRule
    26. 源碼跟蹤

      RibbonAutoConfifiguration->LoadBalancerAutoConfiguration->LoadBalancerInterceptor

      服務(wù)調(diào)用Feign

      Feign是一種聲明式、模板化的HTTP客戶端。

      基于Feign的服務(wù)調(diào)用

      1.在消費(fèi)者引入依賴

      org.springframework.cloud spring-cloud-starter-openfeign

      2.啟動(dòng)類開啟feign支持

      @SpringBootApplication@EnableDiscoveryClient@ComponentScan(basePackages = “com.jyd0124.consume_server.*”)@EnableFeignClientspublic class ConsumeServerApplication { public static void main(String[] args) { SpringApplication.run(ConsumeServerApplication.class, args); } @Bean @LoadBalanced public RestTemplate returnBean() { return new RestTemplate(); }}

      3.創(chuàng)建接口和定義需要遠(yuǎn)程調(diào)用的方法

      @FeignClient(“springbootdemo”)public interface SpringBootFeign { @RequestMapping(value = “/person”, method = RequestMethod.GET) public Map getPerson(@RequestParam(value = “id”) int id);}

      4.調(diào)用服務(wù)。

      @Autowiredprivate SpringBootFeign springBootFeign; @ResponseBody@RequestMapping(value = “/person/{id}”, method = RequestMethod.GET)public Map printInfo(@PathVariable(“id”) int id) {return springBootFeign.getPerson(id);}

      5.訪問,測(cè)試結(jié)果

      負(fù)載均衡

      Feign中本身已經(jīng)集成了Ribbon依賴和自動(dòng)配置,因此我們不需要額外引入依賴,也不需要再注冊(cè)RestTemplate 對(duì)象,可以通過 ribbon.xx 來進(jìn)行全局配置。也可以通過 服務(wù)名.ribbon.xx 來對(duì)指定服務(wù)配置。

      Feign的配置

      feign: client: config: feignName: ##定義FeginClient的名稱 connectTimeout: 5000 # 建立鏈接的超時(shí)時(shí)長(zhǎng) readTimeout: 5000 # 讀取超時(shí)時(shí)長(zhǎng) # 配置Feign的日志級(jí)別,相當(dāng)于代碼配置方式中的Logger loggerLevel: full # Feign的錯(cuò)誤解碼器,相當(dāng)于代碼配置方式中的ErrorDecoder errorDecoder: com.example.SimpleErrorDecoder # 配置重試,相當(dāng)于代碼配置方式中的Retryer retryer: com.example.SimpleRetryer # 配置攔截器,相當(dāng)于代碼配置方式中的 RequestInterceptor requestInterceptors: – com.example.FooRequestInterceptor – com.example.BarRequestInterceptor #配置熔斷不處理404異常 decode404: false

      請(qǐng)求壓縮: 支持對(duì)請(qǐng)求和響應(yīng)進(jìn)行GZIP壓縮,以減少通信過程中的性能損耗

      #請(qǐng)求壓縮feign: compression: request: enabled: true # 開啟請(qǐng)求壓縮 response: enabled: true # 開啟響應(yīng)壓縮

      Hystrix支持

      Feign默認(rèn)也有對(duì)Hystrix的集成

      feign: hystrix: enabled: true # 開啟Feign的熔斷功能

      日志級(jí)別

      默認(rèn)情況下Feign的日志是沒有開啟的。

      feign: client: config: feignName: loggerLevel: full #NONE【性能最佳,適用于生產(chǎn)】:不記錄任何日志(默認(rèn)值) #BASIC【適用于生產(chǎn)環(huán)境追蹤問題】:僅記錄請(qǐng)求方法、URL、響應(yīng)狀態(tài)代碼以及執(zhí)行時(shí)間 #HEADERS:記錄BASIC級(jí)別的基礎(chǔ)上,記錄請(qǐng)求和響應(yīng)的header。 #FULL【比較適用于開發(fā)及測(cè)試環(huán)境定位問題】:記錄請(qǐng)求和響應(yīng)的header、body和元數(shù)據(jù)

      熔斷器Hystrix

      雪崩效應(yīng)

      在微服務(wù)架構(gòu)中,根據(jù)業(yè)務(wù)來拆分成一個(gè)個(gè)的服務(wù),服務(wù)與服務(wù)之間可以相互調(diào)用(RPC),在Spring Cloud可以用RestTemplate+Ribbon和Feign來調(diào)用。為了保證其高可用,單個(gè)服務(wù)通常會(huì)集群部署。由于網(wǎng)絡(luò)原因或者自身的原因,服務(wù)并不能保證100%可用,如果單個(gè)服務(wù)出現(xiàn)問題,調(diào)用這個(gè)服務(wù)就會(huì)出現(xiàn)線程阻塞,此時(shí)若有大量的請(qǐng)求涌入,Servlet容器的線程資源會(huì)被消耗完畢,導(dǎo)致服務(wù)癱瘓。服務(wù)與服務(wù)之間的依賴性,故障會(huì)傳播,會(huì)對(duì)整個(gè)微服務(wù)系統(tǒng)造成災(zāi)難性的嚴(yán)重后果,這就是服務(wù)故障的“雪崩”效應(yīng)。

      Hystrix的特性

      • 服務(wù)熔斷

      Hystrix的熔斷狀態(tài)機(jī)模型:

      hystrix: command: default: execution.isolation.thread.timeoutInMilliseconds: 2000 circuitBreaker: errorThresholdPercentage: 50 # 觸發(fā)熔斷錯(cuò)誤比例閾值,默認(rèn)值50% sleepWindowInMilliseconds: 10000 # 熔斷后休眠時(shí)長(zhǎng),默認(rèn)值5秒 requestVolumeThreshold: 10 # 觸發(fā)熔斷的最小請(qǐng)求次數(shù),默認(rèn)20 #配置項(xiàng)可以參考 HystrixCommandProperties 類

      • 服務(wù)降級(jí)
      • 通過HystrixdeCommand的fallback實(shí)現(xiàn)服務(wù)降級(jí)。
      • 服務(wù)隔離

      -線程池隔離策略

      – 信號(hào)量隔離策略

      Ribbon中使用斷路器

    27. 在pom.xml中添加依賴
    28. org.springframework.cloud spring-cloud-starter-hystrix

    29. 在啟動(dòng)類上添加注解開啟Hystrix
    30. @SpringBootApplication@EnableDiscoveryClient@EnableHystrixpublic class ConsumeServerApplication { public static void main(String[] args) { SpringApplication.run(ConsumeServerApplication.class, args); } @Bean @LoadBalanced public RestTemplate returnBean() { return new RestTemplate(); }}

    31. 編寫熔斷降級(jí)邏輯。在方法上加上@HystrixCommand注解,并指定了fallbackMethod熔斷方法
    32. @ResponseBody@RequestMapping(value = “/info”, method = RequestMethod.GET)@HystrixCommand(fallbackMethod = “backErrorInfo”)public String printInfo() { String url = “http://springbootdemo/backInfo”; return restTemplate.getForObject(url, String.class);}public String backErrorInfo(){ return “sorry,error”;}

    33. 測(cè)試,如果springbootdemo服務(wù)關(guān)閉,會(huì)發(fā)現(xiàn)頁面返回了降級(jí)處理信息
    34. Feign中使用斷路器

      SpringCloud Fegin默認(rèn)已為Feign整合了hystrix

    35. 添加配置
    36. feign: hystrix: enabled: true # 開啟Feign的熔斷功能

    37. 配置FeignClient接口的實(shí)現(xiàn)類,并通過@Component注入到Ioc容器中
    38. @Componentpublic class HystrixMethod implements SpringBootFeign { @Override public Map getPerson(int id) { Map map = new HashMap(); map.put(“code”, 500); map.put(“msg”, “sorry,error”); return map; }}

    39. 在@FeignClient注解中添加降級(jí)方法
    40. @FeignClient(name = “springbootdemo”, fallback = HystrixMethod.class)public interface SpringBootFeign { @RequestMapping(value = “/person”, method = RequestMethod.GET) public Map getPerson(@RequestParam(value = “id”) int id);}

    41. 關(guān)閉 springbootdemo 服務(wù),訪問測(cè)試
    42. Hystrix Dashboard

    43. 添加依賴
    44. org.springframework.bootspring-boot-starter-actuatororg.springframework.cloudspring-cloud-starter-hystrix-dashboard

    45. 在啟動(dòng)類使用@EnableHystrixDashboard注解激活儀表盤
    46. @SpringBootApplication@EnableDiscoveryClient@EnableHystrix@EnableHystrixDashboardpublic class ConsumeServerApplication { public static void main(String[] args) { SpringApplication.run(ConsumeServerApplication.class, args); } @Bean @LoadBalanced public RestTemplate returnBean() { return new RestTemplate(); }}

    47. 訪問頁面
    48. 遇到問題:https://blog.csdn.net/ghyghost/article/details/108053206

      斷路器聚合監(jiān)控Turbine,Turbine是一個(gè)聚合Hystrix 監(jiān)控?cái)?shù)據(jù)的工具。

      網(wǎng)關(guān)Gateway

      介紹

      Spring Cloud Gateway 是 Spring 官方基于 Spring 5.0,Spring Boot 2.0 和 Project Reactor 等技術(shù)開發(fā)的網(wǎng)關(guān),旨在為微服務(wù)架構(gòu)提供一種簡(jiǎn)單而有效的統(tǒng)一的 API 路由管理方式。Spring Cloud Gateway 作為 Spring Cloud 生態(tài)系中的網(wǎng)關(guān),目標(biāo)是替代 Netflflix ZUUL,其不僅提供統(tǒng)一的路由方式,并且基于 Filter 鏈的方式提供了網(wǎng)關(guān)基本的功能,例如:安全,監(jiān)控/埋點(diǎn),和限流等。

      快速入門

    49. 創(chuàng)建gateway-server模塊,引入依賴
    50. org.springframework.cloudspring-cloud-starter-gatewayorg.springframework.cloudspring-cloud-starter-netflix-eureka-client

    51. 編寫啟動(dòng)類
    52. @SpringBootApplication@EnableDiscoveryClientpublic class GatewayServerApplication { public static void main(String[] args) { SpringApplication.run(GatewayServerApplication.class, args); }}

    53. 編寫路由規(guī)則
    54. server: port: 8765spring: application: # 注冊(cè)到eureka上的應(yīng)用名稱 name: gateway_server cloud: gateway: #由一個(gè)ID、一個(gè)目的URL、一組斷言工廠、一組Filter組成 routes: # 路由id,可以隨意寫 – id: consume-server-route # 代理的服務(wù)地址 uri: http://127.0.0.1:8081 # 路由斷言,可以配置映射路徑 predicates: – Path=/person/**eureka: client: # 集群url service-url: defaultZone: http://127.0.0.1:8761/eureka instance: prefer-ip-address: true #使用ip注冊(cè) ip-address: 127.0.0.1 instance-id: ${spring.cloud.client.ip-address}:${server.port}

    55. 啟動(dòng)測(cè)試
    56. 路由

    57. 添加前綴PrefixPath
    58. spring: application: # 注冊(cè)到eureka上的應(yīng)用名稱 name: gateway_server cloud: gateway: #由一個(gè)ID、一個(gè)目的URL、一組斷言工廠、一組Filter組成 routes: # 路由id,可以隨意寫 – id: consume-server-route # 代理的服務(wù)地址 uri: http://127.0.0.1:8081 # 路由斷言,可以配置映射路徑 predicates: – Path=/** filters: # 添加請(qǐng)求路徑的前綴 – PrefixPath=/person

      相當(dāng)于PrefixPath=/personhttp://localhost:8765/180868 –》http://localhost:8765/person/180868 –》http://localhost:8081/person/180868

    59. 去除前綴StripPrefifix
    60. spring: application: # 注冊(cè)到eureka上的應(yīng)用名稱 name: gateway_server cloud: gateway: #由一個(gè)ID、一個(gè)目的URL、一組斷言工廠、一組Filter組成 routes: # 路由id,可以隨意寫 – id: consume-server-route # 代理的服務(wù)地址 uri: http://127.0.0.1:8081 # 路由斷言,可以配置映射路徑 predicates: – Path=/api/person/** filters: # 表示過濾1個(gè)路徑,2表示兩個(gè)路徑,以此類推 – StripPrefix=1

      StripPrefix=1 http://localhost:8765/api/person/180868–》http://localhost:8765/person/180868–》http://localhost:8081/person/180868

    61. 動(dòng)態(tài)路由
    62. uri以 lb: //開頭(lb代表從注冊(cè)中心獲取服務(wù)),后面接的就是你需要轉(zhuǎn)發(fā)到的服務(wù)名稱

      spring: application: # 注冊(cè)到eureka上的應(yīng)用名稱 name: gateway_server cloud: gateway: routes: # 路由id,可以隨意寫 – id: consume-server-route # 代理的服務(wù)地址 uri: lb://springbootdemo # 路由斷言,可以配置映射路徑 predicates: – Path=/person/**

    63. 重寫轉(zhuǎn)發(fā)路徑
    64. 路由轉(zhuǎn)發(fā)是直接將匹配的路由path直接拼接到映射路徑(URI)之后,那么往往沒有那么便利。修改application.yaml

      spring: application: # 注冊(cè)到eureka上的應(yīng)用名稱 name: gateway_server cloud: gateway: routes: # 路由id,可以隨意寫 – id: consume-server-route # 代理的服務(wù)地址 uri: lb://springbootdemo # 路由斷言,可以配置映射路徑 predicates: – Path=/springbootdemo/** filters: – RewritePath=/springbootdemo/(?.*), /${segment}

      請(qǐng)求http://localhost:8765/springbootdemo/person/180868 –》http://localhost:8765/person/180868–》http://localhost:8081/person/180868( 值得注意的是在yml文檔中 $ 要寫成 $ )

    65. 基于服務(wù)發(fā)現(xiàn)的路由規(guī)則
    66. spring: application: # 注冊(cè)到eureka上的應(yīng)用名稱 name: gateway_server cloud: gateway: discovery: locator: #設(shè)置路由訪問方式:http://Gateway_HOST:Gateway_PORT/大寫的serviceId/**,其中微服務(wù)應(yīng)用名默認(rèn)大寫訪問。 enabled: true # 該設(shè)置可以將服務(wù)名改成小寫(默認(rèn)為大寫) lower-case-service-id: true

      這樣,就可以通過http://localhost:8765/springbootdemo/person?id=180868訪問

      過濾器

    67. 生命周期
      • pre:: 這種過濾器在請(qǐng)求被路由之前調(diào)用。
      • post : 這種過濾器在路由到微服務(wù)以后執(zhí)行。
    68. 過濾器類型
      • 局部過濾器(GatewayFilter),應(yīng)用到單個(gè)路由或者一個(gè)分組的路由上,通過 spring.cloud.gateway.routes.filters 配置在具體路由下,只作用在當(dāng)前路由上;
      • 全部過濾器(GlobalFilter),應(yīng)用到所有的路由上,實(shí)現(xiàn) GlobalFilter 接口即可
    69. 常見過濾器
    70. 過濾器名稱

      說明

      AddRequestHeader

      對(duì)匹配上的請(qǐng)求加上Header

      AddRequestParameters

      對(duì)匹配上的請(qǐng)求路由添加參數(shù)

      AddResponseHeader

      對(duì)從網(wǎng)關(guān)返回的響應(yīng)添加Header

      StripPrefifix

      對(duì)匹配上的請(qǐng)求路徑去除前綴

      配置全局默認(rèn)過濾器

      spring: cloud: gateway: default-filters: – AddResponseHeader=X-Response-Default-MyName, jyd0124

      其他過濾器具體可參考GatewayFilterFactory類

    71. 自定義過濾器
    72. 需求:模擬一個(gè)登錄的校驗(yàn)?;具壿嫞喝绻?qǐng)求中有token參數(shù),則認(rèn)為請(qǐng)求有效,放行。
    73. @Componentpublic class TokenFilter implements GlobalFilter, Ordered { private final Logger logger = LoggerFactory.getLogger(TokenFilter.class); @Override public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) { //request,response都可以通過 ServerWebExchange 獲取 String token = exchange.getRequest().getQueryParams().getFirst(“token”); if (StringUtils.isBlank(token)) { logger.info(“token is empty …”); exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED); return exchange.getResponse().setComplete(); } //chain.filter 繼續(xù)向下游執(zhí)行 return chain.filter(exchange); } @Override public int getOrder() { //過濾器的優(yōu)先級(jí),返回值越大級(jí)別越低 return 0; }}

      跨域問題

      @Configurationpublic class GwCorsFilter { /** * 以下CorsWebFilter跨域處理也可以通過配置文件進(jìn)行處理 * spring: * cloud: * gateway: * globalcors: * cors-configurations: */ @Bean public CorsWebFilter corsFilter() { CorsConfiguration config = new CorsConfiguration(); config.setAllowCredentials(true); // 允許cookies跨域 config.addAllowedOrigin(“*”);// #允許向該服務(wù)器提交請(qǐng)求的URI,*表示全部允許,在SpringMVC中,如果設(shè)成*,會(huì)自動(dòng)轉(zhuǎn)成當(dāng)前請(qǐng)求頭中的Origin config.addAllowedHeader(“*”);// #允許訪問的頭信息,*表示全部 config.setMaxAge(18000L);// 預(yù)檢請(qǐng)求的緩存時(shí)間(秒),即在這個(gè)時(shí)間段里,對(duì)于相同的跨域請(qǐng)求不會(huì)再預(yù)檢了 config.addAllowedMethod(“OPTIONS”);// 允許提交請(qǐng)求的方法類型,*表示全部允許 config.addAllowedMethod(“HEAD”); config.addAllowedMethod(“GET”); config.addAllowedMethod(“PUT”); config.addAllowedMethod(“POST”); config.addAllowedMethod(“DELETE”); config.addAllowedMethod(“PATCH”); UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(new PathPatternParser()); source.registerCorsConfiguration(“/**”, config); return new CorsWebFilter(source); } /** * *如果使用了注冊(cè)中心(如:Eureka),進(jìn)行控制則需要增加如下配置 */ @Bean public RouteDefinitionLocator discoveryClientRouteDefinitionLocator(DiscoveryClient discoveryClient) { return new DiscoveryClientRouteDefinitionLocator(discoveryClient,new DiscoveryLocatorProperties()); } /** * 以下是springboot2.0.5出現(xiàn)only one connection 的解決辦法 * @return */ @Bean public HiddenHttpMethodFilter hiddenHttpMethodFilter() { return new HiddenHttpMethodFilter() { @Override public Mono filter(ServerWebExchange exchange, WebFilterChain chain) { return chain.filter(exchange); } }; }}

      負(fù)載均衡和熔斷

      Gateway中默認(rèn)已經(jīng)集成了Ribbon負(fù)載均衡和Hystrix熔斷機(jī)制。但是所有的策略都是走的默認(rèn)值,建議根據(jù)Ribbon和Hystrix手動(dòng)進(jìn)行配置。

      網(wǎng)關(guān)限流

      • 計(jì)數(shù)器限流算法
      • 漏桶算法
      • 令牌桶算法
      • 基于Filter的限流
      • 基于Sentinel的限流

      SpringCloud Config配置中心

      在gitee上創(chuàng)建遠(yuǎn)程配置文件

      構(gòu)建config配置中心服務(wù)

    74. 構(gòu)建Config-server服務(wù),添加依賴
    75. org.springframework.cloudspring-cloud-config-serverorg.springframework.cloudspring-cloud-starter-netflix-eureka-client

    76. 在config-server的啟動(dòng)類添加@EnableConfigServer
    77. @SpringBootApplication@EnableDiscoveryClient@EnableConfigServerpublic class ConfigServerApplication { public static void main(String[] args) { SpringApplication.run(ConfigServerApplication.class, args); }}

    78. 編寫config-server配置文件
    79. server: port: 8888spring: application: name: config_server cloud: config: server: git: #配置文件所在的git倉(cāng)庫(kù) uri: https://gitee.com/jyd0124/springcloudconfig.git #配置文件分支 default-label: master #配置文件所在根目錄 search-paths: config #如果Git倉(cāng)庫(kù)為公開倉(cāng)庫(kù),可以不填寫用戶名和密碼,如果是私有倉(cāng)庫(kù)需要填寫 username: xxx password: xxxeureka: client: service-url: defaultZone: http://127.0.0.1:8761/eureka #服務(wù)注冊(cè)地址

    80. 可通過http://localhost:8888/consume-server.yml測(cè)試是否成功
    81. 獲取配置中心配置

    82. 改造其他隨便一個(gè)服務(wù),比如我使用我自己的consume_server,添加依賴
    83. org.springframework.cloudspring-cloud-starter-configorg.springframework.cloudspring-cloud-starter-netflix-eureka-client

    84. 修改配置
    85. 刪除consume_server的application.yml 文件(因?yàn)樵撐募呐渲弥行墨@?。?/p>

      創(chuàng)建consume_server 的bootstrap.yml 配置文件,其內(nèi)容如下

      spring: cloud: config: name: consume-server # 遠(yuǎn)程倉(cāng)庫(kù)中的版本保持一致 label: master #profile: dev #通過ip直接訪問配置中心 #uri: http://localhost:8888/ #通過eurka訪問配置中心 discovery: #配置中心服務(wù) service-id: config-server enabled: trueeureka: client: service-url: defaultZone: http://127.0.0.1:8761/eureka #服務(wù)注冊(cè)地址

      3.啟動(dòng)consume_server項(xiàng)目發(fā)現(xiàn)獲取到配置文件將服務(wù)暴露在8081端口,測(cè)試接口可成功返回?cái)?shù)據(jù)

      補(bǔ)充:bootstrap.yml文件也是Spring Boot的默認(rèn)配置文件,而且其加載的時(shí)間相比于application.yml更早。bootstrap.yml文件相當(dāng)于項(xiàng)目啟動(dòng)時(shí)的引導(dǎo)文件,內(nèi)容相對(duì)固定。application.yml文件是微服務(wù)的一些常規(guī)配置參數(shù),變化比較頻繁。

      Spring Cloud Bus服務(wù)總線

      問題:

      前面已經(jīng)完成了將微服務(wù)中的配置文件集中存儲(chǔ)在遠(yuǎn)程Git倉(cāng)庫(kù),如果我們更新Git倉(cāng)庫(kù)中的配置文件,那用戶微服務(wù)是否可以及時(shí)接收到新的配置信息并更新呢?經(jīng)過測(cè)試,對(duì)于Git倉(cāng)庫(kù)中配置文件的修改并沒有及時(shí)更新到用戶微服務(wù),只有重啟用戶微服務(wù)才能生效。如果想在不重啟微服務(wù)的情況下更新配置該如何實(shí)現(xiàn)呢? 可以使用Spring Cloud Bus來實(shí)現(xiàn)配置的自動(dòng)更新。

      介紹

      Spring Cloud Bus是用輕量的消息代理將分布式的節(jié)點(diǎn)連接起來,可以用于廣播配置文件的更改或者服務(wù)的監(jiān)控管理。也就是消息總線可以為微服務(wù)做監(jiān)控,也可以實(shí)現(xiàn)應(yīng)用程序之間相互通信。 Spring Cloud Bus可選的消息代理有兩種:RabbitMQ和Kafka。

      具體實(shí)現(xiàn)可參考:https://www.fangzhipeng.com/springcloud/2018/08/08/sc-f8-bus.html https://www.cnblogs.com/babycomeon/p/11141160.html

      Spring Cloud體系技術(shù)綜合應(yīng)用概覽

      來源:https://www.cnblogs.com/jyd0124/p/springcloud.html

      鄭重聲明:本文內(nèi)容及圖片均整理自互聯(lián)網(wǎng),不代表本站立場(chǎng),版權(quán)歸原作者所有,如有侵權(quán)請(qǐng)聯(lián)系管理員(admin#wlmqw.com)刪除。
      用戶投稿
      上一篇 2022年6月14日 06:19
      下一篇 2022年6月14日 06:19

      相關(guān)推薦

      • 京東快遞跨省幾天能到(京東一般多久到貨)

        由于覺得京東平臺(tái)的物流效勞十分的不錯(cuò),而且商品的質(zhì)量都比擬有保證。在京東平臺(tái)購(gòu)物的話,普通多久時(shí)間會(huì)到貨?下面的內(nèi)容停止引見。 京東普通多久到貨? 詳細(xì)要看發(fā)貨地址和你所在的地址的…

        2022年11月26日
      • 抖音帶貨怎么做入門(抖音帶貨怎么做入門教學(xué))

        相信很多小伙伴都有注意到,現(xiàn)在抖音已經(jīng)成為大家最常光顧的一個(gè)平臺(tái)了,作為一個(gè)日活破億的流量池,如今抖音上的用戶數(shù)量極大。因此,現(xiàn)在在抖音上帶貨、賣貨的人也是越來越多了,那么想在抖音…

        2022年11月25日
      • 地靈絕魂劍(地靈絕魂劍像素)

        今天小編給各位分享地靈絕魂劍的知識(shí),其中也會(huì)對(duì)地靈絕魂劍像素進(jìn)行解釋,如果能碰巧解決你現(xiàn)在面臨的問題,別忘了關(guān)注本站,現(xiàn)在開始吧! dnf地靈絕魂劍怎么計(jì)算 地靈絕魂劍的附加攻擊是…

        2022年11月25日
      • 沈陽茂業(yè)中心

        由深圳贏商網(wǎng)茂業(yè)集團(tuán)與上海建工集團(tuán)聯(lián)袂打造的沈陽金廊第一高樓沈陽茂業(yè)中心于2011年11月8日順利實(shí)現(xiàn)主塔樓結(jié)構(gòu)封頂至此,歷經(jīng)四年,沈陽茂業(yè)中心以31095m的高度雄踞東北超高層建…

        2022年11月25日
      • 淘寶直播平臺(tái)抽成多少(淘寶直播平臺(tái)抽成比例)

        隨著時(shí)代的發(fā)展,現(xiàn)在直播帶貨已經(jīng)成為主要帶貨方式,其中淘寶是主流帶貨平臺(tái),不少人在上面直播帶貨賺錢,一些小伙伴也想加入,那么淘寶直播平臺(tái)抽成多少?下面小編為大家?guī)硖詫氈辈テ脚_(tái)抽成…

        2022年11月24日
      • 白襯衫搭配什么褲子好看,女生襯衫穿法圖片

        說起白襯衫和長(zhǎng)褲的搭配組合,不知道大家有沒有發(fā)現(xiàn),雖然是很常見的造型,可不同年齡段慣用的穿搭方式卻不相同,從而也穿出了不同的味道。簡(jiǎn)直是現(xiàn)在這個(gè)季節(jié),時(shí)髦精們的必備造型之一~ 70…

        2022年11月24日
      • Win11遠(yuǎn)程桌面停止響應(yīng) 微軟將在后續(xù)更新中進(jìn)行修復(fù)

        近日,微軟確認(rèn),目前Win11 22H2中存在一個(gè)問題: 通過遠(yuǎn)程桌面網(wǎng)關(guān)(Remote Desktop gateway)或遠(yuǎn)程桌面連接代理( Remote Desktop Con…

        2022年11月23日
      • 寬帶測(cè)速軟件(手機(jī)寬帶測(cè)速軟件)

        中國(guó)聯(lián)通用戶可登錄中國(guó)聯(lián)通網(wǎng)上營(yíng)業(yè)廳,選擇寬帶寬帶服務(wù)寬帶測(cè)速,按頁面指導(dǎo)進(jìn)行測(cè)速,測(cè)速時(shí)建議您直連電腦,如測(cè)速結(jié)果無法達(dá)到簽約速率,您可通過中國(guó)聯(lián)通APP,“服務(wù)報(bào)障在線報(bào)障”進(jìn)…

        2022年11月22日
      • 軟件開發(fā)階段的6大劃分詳解(需求規(guī)格說明書在哪個(gè)階段)

        1計(jì)劃 對(duì)所要解決的問題進(jìn)行總體定義,包括了解用戶的要求及現(xiàn)實(shí)環(huán)境,從技術(shù)、經(jīng)濟(jì)和社會(huì)因素等3個(gè)方面研究并論證本軟件項(xiàng)目的可行性,編寫可行性研究報(bào)告,探討解決問題的方案,并對(duì)可供使…

        2022年11月19日
      • 產(chǎn)品推廣渠道有哪些方式(推廣自己的產(chǎn)品)

        首先,需要做好產(chǎn)品定位和市場(chǎng)定位,這是最基礎(chǔ)的,然后是市場(chǎng)宣傳,可以考慮以下方式: 1,淘寶天貓京東等電商推廣 開通電商銷售渠道,做好運(yùn)營(yíng)。 2,社區(qū)論壇推廣 論壇和社區(qū)的發(fā)帖和回…

        2022年11月19日

      聯(lián)系我們

      聯(lián)系郵箱:admin#wlmqw.com
      工作時(shí)間:周一至周五,10:30-18:30,節(jié)假日休息