国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Spring Cloud 2022.x版本使用gateway和nacos實現(xiàn)動態(tài)路由和負載均衡

這篇具有很好參考價值的文章主要介紹了Spring Cloud 2022.x版本使用gateway和nacos實現(xiàn)動態(tài)路由和負載均衡。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

Spring Cloud Alibaba官方:https://sca.aliyun.com/zh-cn/
Spring Cloud官網(wǎng):https://spring.io/projects/spring-cloud

Spring Cloud與Spring Cloud Alibaba版本對應(yīng)說明:https://sca.aliyun.com/zh-cn/docs/2022.0.0.0/overview/version-explain
Spring Cloud 2022.x版本使用gateway和nacos實現(xiàn)動態(tài)路由和負載均衡,java,spring cloud,gateway,負載均衡,nacos
Spring Cloud 2022.x版本使用gateway和nacos實現(xiàn)動態(tài)路由和負載均衡,java,spring cloud,gateway,負載均衡,nacos

1、nacos下載安裝

下載地址:https://github.com/alibaba/nacos/releases
下載編譯壓縮并解壓:nacos-server-2.2.3.zip。

1.1、啟動服務(wù)器

注:Nacos的運行需要以至少2C4g60g*3的機器配置下運行。

#啟動命令(standalone代表著單機模式運行,非集群模式):

#Linux/Unix/Mac
sh startup.sh -m standalone

#如果您使用的是ubuntu系統(tǒng),或者運行腳本報錯提示[[符號找不到,可嘗試如下運行:
bash startup.sh -m standalone

#Windows
startup.cmd -m standalone

1.2、關(guān)閉服務(wù)器

#Linux/Unix/Mac
sh shutdown.sh

#Windows
shutdown.cmd
#或者雙擊shutdown.cmd運行文件。

1.3、服務(wù)注冊&發(fā)現(xiàn)和配置管理接口

#服務(wù)注冊
curl -X POST 'http://127.0.0.1:8848/nacos/v1/ns/instance?serviceName=nacos.naming.serviceName&ip=20.18.7.10&port=8080'

#服務(wù)發(fā)現(xiàn)
curl -X GET 'http://127.0.0.1:8848/nacos/v1/ns/instance/list?serviceName=nacos.naming.serviceName'

#發(fā)布配置
curl -X POST "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test&content=HelloWorld"

#獲取配置
curl -X GET "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test"

參考自官方安裝說明:https://nacos.io/zh-cn/docs/quick-start.html

2、代碼示例

示例代碼分為3個工程:app1(服務(wù)1工程),app2(服務(wù)2工程),gateway(網(wǎng)關(guān)工程),使用的依賴包版本:

com.alibaba.cloud:2022.0.0.0
org.springframework.cloud:2022.0.4
org.springframework.boot:3.0.9

app1,app2都提供個接口:goods(商品信息接口),user(用戶信息接口)

goods接口通過網(wǎng)關(guān),app1和app2提供負載模式訪問
user接口通過網(wǎng)關(guān),代理方式訪問

2.1、app1工程代碼

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.penngo.app1</groupId>
    <artifactId>gateway-app1</artifactId>
    <version>1.0-SNAPSHOT</version>
    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
    </dependencies>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2022.0.0.0</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>2022.0.4</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>3.0.9</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
</project>

配置文件:application.yml

spring:
  application:
    name: app-service
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
        locator:
          lower-case-service-id: true
server:
  port: 9091
  servlet:
    encoding:
      force: true
      charset: UTF-8
      enabled: true

業(yè)務(wù)代碼:AppMain.java

package com.penngo.app1;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashMap;
import java.util.Map;

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

    @RestController
    public class HelloController {
        @GetMapping("/goods")
        public Map goods(){
            Map<String, String> data = new HashMap<>();
            data.put("name", "手機");
            data.put("service", "app1");
            return data;
        }
        @GetMapping("/user")
        public Map<String, String> user(){
            Map<String, String> data = new HashMap<>();
            data.put("user", "test");
            data.put("service", "app1");
            return data;
        }
    }
}

Spring Cloud 2022.x版本使用gateway和nacos實現(xiàn)動態(tài)路由和負載均衡,java,spring cloud,gateway,負載均衡,nacos

2.2、app2工程代碼

pom.xml與app1工程一樣。
配置文件:application.yml,與app2區(qū)分不同的端口

spring:
  application:
    name: app-service
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
        locator:
          lower-case-service-id: true
server:
  port: 9091
  servlet:
    encoding:
      force: true
      charset: UTF-8
      enabled: true

Spring Cloud 2022.x版本使用gateway和nacos實現(xiàn)動態(tài)路由和負載均衡,java,spring cloud,gateway,負載均衡,nacos

2.3、gateway網(wǎng)關(guān)工程代碼

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.penngo.gateway</groupId>
    <artifactId>gateway-nacos</artifactId>
    <version>1.0-SNAPSHOT</version>
    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <dependencies>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-loadbalancer</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2022.0.0.0</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>2022.0.4</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>3.0.9</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

</project>

配置application.yml

server:
  port: 9090
spring:
  application:
    name: gatewayapp
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
        locator:
          lower-case-service-id: true
      config:
        server-addr: localhost:8848
        # 加載 dataid 配置文件的后綴,默認是 properties
        file-extension: yml
        # 配置組,默認就是 DEFAULT_GROUP
        group: DEFAULT_GROUP
        # 配置命名空間,此處寫的是 命名空間的id 的值,默認是 public 命名空間
        # namespace:
        # data-id 的前綴,默認就是 spring.application.name 的值
        prefix: ${spring.application.name}

GatewayMain.java

package com.penngo.gateway;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

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

3、動態(tài)配置網(wǎng)關(guān)路由

三個工程啟動后,nacos的服務(wù)列表

Spring Cloud 2022.x版本使用gateway和nacos實現(xiàn)動態(tài)路由和負載均衡,java,spring cloud,gateway,負載均衡,nacos

3.1、配置動態(tài)路由

spring:
  cloud:
    gateway:
      routes:
        - id: app1
          uri: http://localhost:9091/
          predicates:
            - Path=/app1/**
          filters:
            - StripPrefix=1
        - id: app2
          uri: http://localhost:9092/
          predicates:
            - Path=/app2/**
          filters:
            - StripPrefix=1

配置后,可以通過網(wǎng)關(guān)的端口9090和地址訪問

http://localhost:9090/app1/user
http://localhost:9090/app2/user

Spring Cloud 2022.x版本使用gateway和nacos實現(xiàn)動態(tài)路由和負載均衡,java,spring cloud,gateway,負載均衡,nacos

Spring Cloud 2022.x版本使用gateway和nacos實現(xiàn)動態(tài)路由和負載均衡,java,spring cloud,gateway,負載均衡,nacos

3.2、配置為負載模式

spring:
  cloud:
    gateway:
      routes:
        - id: app1
          uri: http://localhost:9091/
          predicates:
            - Path=/app1/**
          filters:
            - StripPrefix=1
        - id: app2
          uri: http://localhost:9092/
          predicates:
            - Path=/app2/**
          filters:
            - StripPrefix=1
        - id: app
          uri: lb://app-service
          predicates:
            - Path=/app/**
          filters:
            - StripPrefix=1

配置后,可以通過同一個地址訪問到兩個服務(wù)返回的數(shù)據(jù)

http://localhost:9090/app/goods

Spring Cloud 2022.x版本使用gateway和nacos實現(xiàn)動態(tài)路由和負載均衡,java,spring cloud,gateway,負載均衡,nacos
Spring Cloud 2022.x版本使用gateway和nacos實現(xiàn)動態(tài)路由和負載均衡,java,spring cloud,gateway,負載均衡,nacos

4、gateway配置規(guī)則

參數(shù)說明

id: 路由ID
uri: 目標(biāo)地址,可以是服務(wù),如果服務(wù)Spring推薦用全大寫,實際調(diào)用大小寫不敏感,都可以調(diào)通。
predicates: 匹配路徑,以瀏覽器請求的端口號后面的第一級路徑為起始。
filters: 過濾器,包含Spring Gateway 內(nèi)置過濾器,可以自定義過濾器。

4.1、請求轉(zhuǎn)發(fā),轉(zhuǎn)發(fā)指定地址

routes:
# 跳轉(zhuǎn)URL
- id: 163_route
  uri: http://localhost:9091/
  predicates:
    - Path=/app
  • 訪問地址:http://localhost:9090/app/index
  • 真實地址:http://localhost:9091/app/index

4.2、去掉指定的前綴路徑

- id: app1
  uri: http://localhost:9091/
  predicates:
    - Path=/app1/**
  filters:
    - StripPrefix=1

去掉第1層的路徑前綴app1

  • 訪問地址:http://localhost:9090/app1/user
  • 真實地址:http://localhost:9091/user

4.3、正則匹配重寫路徑

- id: test
  uri: lb://app-service
  predicates:
    - Path=/test/**
  filters:
    - RewritePath=/test/(?<path>.*), /$\{path}

去掉第1層的路徑前綴app1

  • 訪問地址:http://localhost:9090/app/goods
  • 真實地址:http://localhost:9091/goods 或 http://localhost:9091/goods

源碼下載文章來源地址http://www.zghlxwxcb.cn/news/detail-672855.html

到了這里,關(guān)于Spring Cloud 2022.x版本使用gateway和nacos實現(xiàn)動態(tài)路由和負載均衡的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 優(yōu)化 spring cloud gateway+nacos時服務(wù)恢復(fù)調(diào)用太慢問題

    問題描述 在使用 spring cloud gateway + nacos 做服務(wù)發(fā)現(xiàn)時,會發(fā)現(xiàn)當(dāng)下游的服務(wù)器恢復(fù)了,但是還有經(jīng)過一段時間 gateway 才成功轉(zhuǎn)發(fā)請求到剛恢復(fù)的下游服務(wù)上。于是我就深入源碼進行企圖通過修改相關(guān)配置的方式優(yōu)化gateway服務(wù)發(fā)現(xiàn)的恢復(fù)時間。 相關(guān)依賴版本 源碼 經(jīng)過漫長的

    2024年02月01日
    瀏覽(93)
  • CVE漏洞復(fù)現(xiàn)-CVE-2022-22947-Spring Cloud Gateway RCE

    CVE漏洞復(fù)現(xiàn)-CVE-2022-22947-Spring Cloud Gateway RCE

    微服務(wù)架構(gòu)與Spring Cloud 最開始時,我們開發(fā)java項目時,所有的代碼都在一個工程里,我們把它稱為單體架構(gòu)。當(dāng)我們的項目的代碼量越來越大時,開發(fā)的成員越來越多時,這時我們項目的性能以及我們開發(fā)的效率都會存在非常大的問題,所以對于這樣的項目,我們需要把它

    2023年04月14日
    瀏覽(26)
  • spring cloud整合spring boot,整合nacos、gateway、open-feign等組件

    想看具體詳情的可以看我的github鏈接:codeking01/platform-parent: spring cloud整合spring boot、nacos、gateway、open feign等組件 (github.com) 由于我升級了jdk17,所以用上了spring boot 3.0.2了。 踩坑無數(shù),一堆無用文章,寫來寫去,本文主要是提供給有基礎(chǔ)的開發(fā)者再次快速搭建使用(確定版本

    2024年02月11日
    瀏覽(95)
  • 微服務(wù)動態(tài)權(quán)限管理方案(Spring Cloud Gateway+Spring Cloud Security)

    微服務(wù)動態(tài)權(quán)限管理方案(Spring Cloud Gateway+Spring Cloud Security)

    微服務(wù)認證方案的大體方向是統(tǒng)一在網(wǎng)關(guān)層面認證鑒權(quán),微服務(wù)只負責(zé)業(yè)務(wù),和鑒權(quán)完全隔離 整體包含以下四個角色 客戶端 :需要訪問微服務(wù)資源 網(wǎng)關(guān) :負責(zé)轉(zhuǎn)發(fā)、認證、鑒權(quán) OAuth2.0授權(quán)服務(wù) :負責(zé)認證授權(quán)頒發(fā)令牌 微服務(wù)集合 :提供資源的一系列服務(wù)。 這里的客戶端

    2024年02月12日
    瀏覽(21)
  • Spring Cloud Day2 Nacos配置管理、Feign遠程調(diào)用與Gateway服務(wù)網(wǎng)關(guān)

    Spring Cloud Day2 Nacos配置管理、Feign遠程調(diào)用與Gateway服務(wù)網(wǎng)關(guān)

    Nacos除了可以做注冊中心,同樣可以做配置管理來使用。 當(dāng)微服務(wù)部署的實例越來越多,達到數(shù)十、數(shù)百時,逐個修改微服務(wù)配置就會讓人抓狂,而且很容易出錯。我們需要一種統(tǒng)一配置管理方案,可以集中管理所有實例的配置。 Nacos一方面可以將配置集中管理,另一方可以

    2024年02月10日
    瀏覽(21)
  • Gateway網(wǎng)關(guān)組件(在Spring Cloud整合Gateway(idea19版本))

    Gateway網(wǎng)關(guān)組件(在Spring Cloud整合Gateway(idea19版本))

    ????????Spring Cloud Gateway官網(wǎng):Spring Cloud Gateway ????????局域網(wǎng)中就有網(wǎng)關(guān)這個概念,局域網(wǎng)接收數(shù)據(jù)或發(fā)送數(shù)據(jù)都要通過網(wǎng)關(guān),比如使用VMware虛擬機軟件搭建虛擬機集群的時候,往往我們需要選擇IP段中的?個IP作為網(wǎng)關(guān)地址,網(wǎng)關(guān)可以對請求進行控制,提升我們系統(tǒng)的安

    2024年02月16日
    瀏覽(26)
  • 第八章 : Spring cloud 網(wǎng)關(guān)中心 Gateway (動態(tài)路由)

    第八章 : Spring cloud 網(wǎng)關(guān)中心 Gateway (動態(tài)路由) 前言 本章知識點:重點介紹動態(tài)網(wǎng)關(guān)路由的背景、動態(tài)路由與靜態(tài)路由的概念,以及如何基于Nacos實現(xiàn)動態(tài)網(wǎng)關(guān)路由 的實戰(zhàn)案例。 背景 前面章節(jié)介紹了Spring Cloud Gateway提供的配置路由規(guī)則的兩種方法,但都是在Spring Cloud Ga

    2024年01月19日
    瀏覽(37)
  • spring-cloud-gateway版本和springboot版本不匹配

    在搭建gateway服務(wù)的時候,啟動出現(xiàn)以下問題: Description: An attempt was made to call a method that does not exist. The attempt was made from the following location: ? ? org.springframework.cloud.gateway.config.GatewayAutoConfiguration$NettyConfiguration.buildConnectionProvider(GatewayAutoConfiguration.java:798) The following method did no

    2024年02月16日
    瀏覽(23)
  • 【SpringCloud】11、Spring Cloud Gateway使用Sentinel實現(xiàn)服務(wù)限流

    1、關(guān)于 Sentinel Sentinel 是阿里巴巴開源的一個流量防衛(wèi)防護組件,可以為微服務(wù)架構(gòu)提供強大的流量防衛(wèi)能力,包括流量控制、熔斷降級等功能。Spring Cloud Gateway 與 Sentinel 結(jié)合,可以實現(xiàn)強大的限流功能。 Sentinel 具有以下特性: 豐富的應(yīng)用場景:Sentinel 承接了阿里巴巴近

    2024年02月01日
    瀏覽(23)
  • 【合集】Spring Cloud 組件——架構(gòu)進化史話 & Eureka,Nacos,OpenFeign,Ribbon,Sentinel,Gateway ,Seata+事務(wù). . .

    【合集】Spring Cloud 組件——架構(gòu)進化史話 & Eureka,Nacos,OpenFeign,Ribbon,Sentinel,Gateway ,Seata+事務(wù). . .

    Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智能路由,微代理,控制總線,一次性令牌,全局鎖,領(lǐng)導(dǎo)選舉,分布式會話,集群狀態(tài))。 注意: 首先,盡管Spring Cloud帶有“Cloud”這個單詞,但它并不是云計算解

    2024年02月08日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包