Teknologian jakaminen

SpringCloudGateway

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

vaikutus

  • Yhtenäinen hallinta, helppo seurata
  • Suojaus, virranrajoitus: suodata laittomat tiedot yhdyskäytäväkerroksessa
  • nginx ulkoinen yhdyskäytävä, yhdyskäytävän intranet
  • nginxiä voidaan parantaa Lualla tai Kongilla

konsepti

  • id: mikä tahansa nimi
  • uri: Välityspalvelimen osoite. id ja uri vaaditaan, predikaatti ja suodatin ovat valinnaisia
  • Predikaatti: voidaan käyttää yhdistämään yhdyskäytävään käytettävä uri.
  • Suodatin: GatewayFilterin ilmentymä, joka lisää logiikkaa ennen välityspalvelinta tai sen jälkeen mahdollisimman joustavasti

Käsittelykulku

  • Ensin Handler Mapping käsittelee URL-osoitteen ja antaa sen sitten Web Handlerille. Kun käsittely on valmis, se kutsuu varsinaista välityspalvelinta suodattimen toisesta puoliskosta. Palauta tulos WebHandleriin, sitten HandlerMappingiin ja lopuksi asiakkaalle

käyttää

gateway:
      discovery:
        locator:
          enabled: true # 启用自动根据服务ID生成路由
          lower-case-service-id: true # 设置路由的路径为小写的服务ID
  • 1
  • 2
  • 3
  • 4
  • 5

yml-kokoonpano

  • Jos luettelon elementeissä on useita kenttiä, tarvitset "-" ja kaksoispisteen kunkin kentän ja arvon määrittämiseen, jos kenttiä on vain yksi, voit erottaa ne pilkuilla.
  • Objektityypin konfigurointi, jokainen kenttä voidaan määrittää "-"- ja kaksoispisteen avulla
  • Karttatyyppi: avain, arvo erotettuna kaksoispisteellä
predicates:
  - Path=/sendOrder
  - Query=name,ma.
  - name: Query
    args:
      param: id
      regexp: d+
 #predicates是List, 它的元素是
 public class PredicateDefinition {

	@NotNull
	private String name;

	private Map<String, String> args = new LinkedHashMap<>();
  }
  等号分割转成对象的写法不是yml内置支持的
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

predikaatti

  • Predikaattikonfiguraatio on List, jonka elementit voivat olla tietyssä muodossa olevia merkkijonoja tai objekteja. Merkkijonon kirjoitusmenetelmä: jaettu yhtäläisyysmerkillä, ensimmäinen osa on predikaatin nimen nimi, toinen osa args erotetaan pilkuilla, arvo tallennetaan Map-arvoon ja Map-avain luodaan automaattisesti. Objektin kirjoitusmenetelmä: PredicateDefinition
  • Jos itse arvoissa on pilkkuja ja kaksoispisteitä, merkkijonomuotoa ei voi käyttää
  • ShortcutType-menetelmä määrittelee args-parametrien jäsennysmenetelmän DEFAULT:lle: shortcutFieldOrder poistaa kentän nimen ja vastaa parametrin args arvoa GATHER-LISTA : pilkuilla erotettu luettelo, mutta viimeinen Arvo on Boolen arvo, joka lopulta muunnetaan 2 avaimen kartaksi. Ensimmäisen avaimen arvo on List Boolen arvon edessä ja toinen avain on Boolen arvo.
  • Käytetään yhdistämään yhdyskäytävään liittyvät pyynnöt (kuten uri, kyselyparametrit, pyynnön otsikot), nykyinen reitti tulee voimaan.
  • GatewayPredicate-toteutusta vastaava toteutusluokka on RoutePredicateFactory:n toteutusluokka. Toteutusluokan nimeäminen on esimerkiksi: PathRoutePredicateFactory.
  • Predikaatin nimi vastaa tehtaan toteutusluokan luokan nimen etuliitettä, ja predikaattiparametri args vastaa tehdasasetusta ConfigClass.
  • Useita predikaatteja onjaSuhde
  • Kun predikaatti ei läpäise, yhdyskäytävä palauttaa 404

Polku

  • Vastaa polkuja, tue muurahaisvastaavuutta ja poimi uriVariables kautta {}

Kysely

  • Onko olemassa vastaava http-pyyntöparametrin nimi. Arvo voi olla säännöllinen?
  • nimi on kiinteä kysely, argsilla on 2 arvoa, param ja regexp, jotka vastaavat kyselyparametrin nimeä ja arvoa
  • Kun vain nimi on määritetty, se tarkoittaa, että niin kauan kuin pyyntöparametri on olemassa, se välitetään.

Otsikko

  • HeaderRoutePredicateFactory
  • Vastaa pyynnön otsikon nimi ja arvo. Todellinen pyynnön otsikon arvo voi olla useita.

Menetelmä

  • Vastaa HTTP-pyyntömenetelmää, kokoonpanon tulee olla isoilla kirjaimilla ja erotettu pilkuilla.

RemoteAddr

  • Pyyntöä vastaava asiakkaan IP, tarkemmin sanottuna viimeisen verkon välityspalvelimen IP, voi olla useita pilkuilla erotettuina

Isäntä

  • Vastaa isäntäpyynnön otsikossa olevaa isäntäosan arvoa (porttia lukuun ottamatta).
  • Käytä AntPathMatcheria täsmäämiseen, ja polun erotin on "."

Eväste

  • Yhdistä evästeen nimi ja arvo. Arvo voidaan täsmäyttää säännöllisesti.

Paino

  • Käytetään eri reittien kuormituksen tasapainottamiseen. Saman ryhmän reitit kuormataan painon mukaan.
  • Voit määrittää kaksi pilkuilla erotettua arvoa, jotka ovat ryhmittely ja paino.
  • WeightCalculatorWebFilter: Kun käynnistetään, kaksikerroksinen kartta luodaan paino-määrityksen perusteella. Ensimmäinen kerros on ryhmän nimi ja toinen kerros reititystunnus. ja kullekin ryhmälle valitaan reititystunnus.
  • WeightRoutePredicateFactory: Predikaattisuodatuksessa suodatetaan ryhmän ja reittitunnuksen perusteella

suodattaa

  • Konfiguroinnin kirjoitustapa on sama kuin predikaatti. Merkkijonon kirjoitustapa: jaettu yhtäläisyysmerkillä. Ensimmäinen osa vastaa suodatintehtaan GatewayFilterFactory-luokan nimeä ja toinen osa on parametri.
  • Suodattimia käytetään pyyntöjen ja vastausten muokkaamiseen

AddRequestHeader

  • Lisää pyyntöotsikot, jotka taustajärjestelmä voi saada
  • Pyynnön otsikon arvo tukee dynaamista hankintaa uriVariablesista

StripPrefix

  • On vain yksi kokonaislukuarvo n Kun olet jakanut pyydetyn polun "/":llä, poista etuliite n

rajoittava

Verkkotunnusten välinen

spring.cloud.gateway.globalcors:
  cors-configurations:
    '[/**]': #跨域的uriPattern
      allowedHeaders: "*"
      allowedOrigins: "*"
      allowedMethods:
        - POST
        - OPTIONS
        - GET
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • Palvelin määrittää, onko kyseessä verkkotunnusten välinen pyyntö, sillä pyynnön otsikko Origin ja pyynnön URL-osoitteen malli, isäntä ja portti ovat samat.
  • On oltava verkkotunnusten välinen määritys, ja pyydetty uri vastaa verkkotunnusten välisen määrityksen uriPattern-osoitetta. Jos se on verkkotunnusten välinen, se sallii verkkotunnusten väliset pyyntöotsikot. lähteet, pyyntömenetelmät ja todelliset pyynnöt verkkotunnusten välisessä määrityksessä, vastaavatko pyynnön otsikkoa, lähdettä ja pyyntömenetelmää, jos ne kaikki vastaavat, suorita verkkotunnusten välinen käyttö, muussa tapauksessa palauta 403Forbiden.
  • org.springframework.web.reactive.handler.AbstractHandlerMapping#getHandler
  • org.springframework.web.cors.reactive.DefaultCorsProcessor#process

Luo reittejä automaattisesti

  • Tukee palvelutunnuksen hankkimista palvelunhaun kautta ja luo automaattisesti reititysmääritykset palvelutunnuksen perusteella.Oletusreititysmäärityksen uri on lb://serviceId, predikaatti on /serviceId/** ja suodatin on Rewritepath poistaa serviceId.

globaali suodatin

ReactiveLoadBalancerClientFilter

  • Prosessoidaksesi reititys-URI:n lb-mallilla, hanki ensin palveluinstanssi palvelun nimen mukaisesti ServiceInstanceListSupplierin kautta ja sitten kuormitustaso ReactorLoadBalancer-esiintymän kautta.

RouteToRequestUrlFilter

  • Tee 2 asiaa: 1. Tue 2-kerroksisia malleja, tallenna ulompi malli GATEWAY_SCHEME_PREFIX_ATTR:ään ja poista se sitten. 2. Käytä sisäistä shemeä, isäntää ja porttia korvataksesi todellisen pyydetyn URI:n edelleenlähetyksen saavuttamiseksi.