日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

微服务网关Gateway

發布時間:2023/12/3 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 微服务网关Gateway 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

使用場景

不同的微服務一般會有不同的網絡地址,而外部客戶端可能需要調用多個服務的接口才能完成一個業務需求,如果讓客戶端直接與各個微服務通信,會有以下的問題:

  • 客戶端會多次請求不同的微服務,增加了客戶端的復雜性
  • 存在跨域請求,在一定場景下處理相對復雜
  • 認證復雜,每個服務都需要獨立認證
  • 難以重構,隨著項目的迭代,可能需要重新劃分微服務。例如,可能將多個服務合并成一個或者將一個服務拆分成多個。如果客戶端直接與微服務通信,那么重構將會很難實施
  • 某些微服務可能使用了防火墻 / 瀏覽器不友好的協議,直接訪問會有一定的困難
    以上這些問題可以借助網關解決。
    網關是介于客戶端和服務器端之間的中間層,所有的外部請求都會先經過 網關這一層。也就是說,API 的實現方面更多的考慮業務邏輯,而安全、性能、監控可以交由 網關來做,這樣既提高業務靈活性又不缺安全性

一、引入依賴、目錄結構

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-hystrix</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis-reactive</artifactId></dependency>

二、GatewayApplication

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

三、application.yml

spring:application:name: sysgatewaycloud:gateway:globalcors:cors-configurations:'[/**]': # 匹配所有請求allowedOrigins: "*" #跨域處理 允許所有的域allowedMethods: # 支持的方法- GET- POST- PUT- DELETEroutes:- id: goodsuri: lb://goodspredicates:- Path=/goods/**filters:- StripPrefix= 1 server:port: 9101 eureka:client:service-url:defaultZone: http://127.0.0.1:6868/eurekainstance:prefer-ip-address: true

四、自定義微服務網關過濾器filter

1、Ipfilter

package com.william.filter;import org.springframework.cloud.gateway.filter.GatewayFilterChain; import org.springframework.cloud.gateway.filter.GlobalFilter; import org.springframework.core.Ordered; import org.springframework.http.server.reactive.ServerHttpRequest; import org.springframework.stereotype.Component; import org.springframework.web.server.ServerWebExchange; import reactor.core.publisher.Mono;import java.net.InetSocketAddress;/*** @author :lijunxuan* @date :Created in 2019/7/11 9:24* @description :* @version: 1.0*//*** 自定義過濾器* 在這里可以記錄訪問者的IP*/ @Component public class Ipfilter implements GlobalFilter, Ordered {@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {System.out.println("第一個過濾器的Ipfilter");//獲取請求ServerHttpRequest request = exchange.getRequest();InetSocketAddress remoteAddress = request.getRemoteAddress();String id = request.getId();//通過請求獲取訪問者的ip地址String hostStringAddress = remoteAddress.getHostString();System.out.println("訪問者的Ip地址為:"+hostStringAddress);System.out.println("請求的id為:"+id);return chain.filter(exchange);}@Overridepublic int getOrder() {return 1;} }

2、UrlFilter

package com.william.filter;import org.springframework.cloud.gateway.filter.GatewayFilterChain; import org.springframework.cloud.gateway.filter.GlobalFilter; import org.springframework.core.Ordered; import org.springframework.http.server.reactive.ServerHttpRequest; import org.springframework.stereotype.Component; import org.springframework.web.server.ServerWebExchange; import reactor.core.publisher.Mono;import java.net.InetSocketAddress;/*** @author :lijunxuan* @date :Created in 2019/7/11 9:24* @description :* @version: 1.0*//*** 自定義過濾器* 在這里可以記錄訪問者訪問的url地址*/ @Component public class UrlFilter implements GlobalFilter, Ordered {@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {System.out.println("第二個過濾器的Ipfilter");//獲取請求ServerHttpRequest request = exchange.getRequest();InetSocketAddress remoteAddress = request.getRemoteAddress();String id = request.getId();//通過請求獲取訪問者訪問的url的地址String path = request.getURI().getPath();System.out.println("訪問者的訪問地址為:"+path);System.out.println("請求的id為:"+id);return chain.filter(exchange);}@Overridepublic int getOrder() {return 2;} }

五、測試結果

總結

以上是生活随笔為你收集整理的微服务网关Gateway的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。