首页 > 其他分享 >SpringGateway不用注册中心实现负载均衡

SpringGateway不用注册中心实现负载均衡

时间:2023-05-26 17:25:10浏览次数:31  
标签:负载 SpringGateway spring boot springframework 注册 import org cloud

1、pom

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.1.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.modules.scistor</groupId>
    <artifactId>esb-gateway</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>esb-gateway</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Hoxton.SR3</spring-cloud.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <!-- 网关gateway -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>

        <!-- 负载ribbon -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
        </dependency>
    </dependencies>

    <!-- 依赖版本管理 -->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <!--添加配置跳过测试-->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.22.2</version>
                <configuration>
                    <skipTests>true</skipTests>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.1.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.modules.scistor</groupId>
    <artifactId>esb-gateway</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>esb-gateway</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Hoxton.SR3</spring-cloud.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <!-- 网关gateway -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>

        <!-- 负载ribbon -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
        </dependency>
    </dependencies>

    <!-- 依赖版本管理 -->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <!--添加配置跳过测试-->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.22.2</version>
                <configuration>
                    <skipTests>true</skipTests>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

2、配置

server:
  port: 9999
spring:
  cloud:
    gateway:
      routes:
        - id: my_route
          uri: lb://load-balanced-service
#          uri: http://127.0.0.1:9001
          predicates:
            - Path=/ssoapi/**
#          filters:
#            - StripPrefix=1
load-balanced-service:
  ribbon:
    # 负载地址
    listOfServers: http://127.0.0.1:9001, http://127.0.0.1:9002
    # 负载轮询策略
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RoundRobinRule
    # 健康检查
#    NFLoadBalancerPingClassName: com.modules.scistor.config.HealthExamination

3、启动类

package com.tl.gateway;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class GatewayApplication {

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

}

4、健康检查

package com.modules.scistor.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

/**
 * @Auther: lc
 * @Date: 2020/7/1 11:37
 * @Description: 健康检查配置类
 */
@Configuration
public class HealthConfig {
    @Bean
    public RestTemplate restTemplate()
    {
        return new RestTemplate();
    }
}
package com.modules.scistor.config;

import com.netflix.loadbalancer.IPing;
import com.netflix.loadbalancer.Server;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.client.RestTemplate;

/**
 * @Auther: lc
 * @Date: 2020/7/1 11:39
 * @Description: 健康检查实现
 */
public class HealthExamination implements IPing {

    @Autowired
    private RestTemplate restTemplate;

    @Override
    public boolean isAlive(Server server) {
        String url = "http://" + server.getId() + "/health";
        try
        {
            ResponseEntity<String> heath = restTemplate.getForEntity(url, String.class);
            if (heath.getStatusCode() == HttpStatus.OK)
            {
                System.out.println("ping " + url + " success and response is " + heath.getBody());
                return true;
            }
            System.out.println("ping " + url + " error and response is " + heath.getBody());
            return false;
        }
        catch (Exception e)
        {
            System.out.println("ping " + url + " failed");
            return false;
        }
    }
}

 

标签:负载,SpringGateway,spring,boot,springframework,注册,import,org,cloud
From: https://www.cnblogs.com/wujf/p/17435291.html

相关文章

  • 注册中心
    服务注册与发现当我们新添加一个微服务示例的时候,微服务就会将自己的ip和prot发送到注册中心,在注册中心里面记录下来,当APIgateway需要访问某些微服务的时候,就回去注册中心取到相应的IP和Port。从此实现自动化操作。技术选型consuldocker拉取consul镜像dock......
  • Windows驱动开发学习记录-使用Inf安装过滤驱动时自动添加注册表相关内容
     做过滤驱动时一般需要在相关class驱动里添加过滤信息,即LowerFilters或者UpperFilters,比如disk类的注册表当前信息,如下图:一个常规的inf文件如下所示:;;USBFilter.inf;[Version]Signature="$WINDOWSNT$"Class=TOASTERClassGuid={B85B7C50-6A01-11d2-B841-00C04FAD517......
  • 怎么提高小程序注册量
    要提高小程序注册量,可以考虑以下几个方面:简化注册流程:优化注册流程,减少用户填写信息的步骤和难度,提高注册完成的便捷性和速度。引入社交登录:可以将微信登录、QQ登录等社交账号作为小程序的注册方式,提高用户注册的便捷性。免费试用:提供免费试用的机会,吸引用户注册并试用小程序,体验小......
  • Gitlab安装与Gitlab-Runner注册
    1、gitlab的三种安装方式: rmp方式:wgethttps://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-12.9.0-ce.0.el7.x86_64.rpmrpm-ivhgitlab-ce-12.9.0-ce.0.el7.x86_64.rpmvim/etc/gitlab.rb#编辑站点地址gitlab-ctlreconfigure#配......
  • Nginx+Tomcat负载均衡会话保持​
    拓扑图:推荐步骤:Centos01安装Nginx和keepalived配置为主服务器对外提供服务,安装DNS服务器设置域名www.bdqn.com域名映射到keepalived的vlp飘逸地址,Centos02安装Nginx和keepalived配置为备份服务器Centos03和Centos04安装Tomcat服务器配置会话保持设置主页修改Centos04的tomcat配置文......
  • Fdog系列(一):思来想去,不如写一个聊天软件,那就从仿QQ注册页面开始吧。
    文章目录一.前言1.基础布局2.自动切换图片3.添加内容4.自动缩放,控件的显示和隐藏5.响应用户输入操作所有文章源码已整体打包上传至github,求星星!一.前言两年的大学生活马上就要结束了,马上面临实习,突然心血来潮,想着最后再来写一个项目来总结这几年所学的东西,难的项目,咱也不会,索......
  • Fdog系列(二):html写完注册页面之后怎么办,用java写后台响应呀。
    文章目录1.前言2.创建javaweb项目3.创建Server4.解决中文乱码问题5.响应后台数据目录Fdog系列(一):思来想去,不如写一个聊天软件,那就从仿QQ注册页面开始吧。所有文章源码已整体打包上传至github,求星星!1.前言接着第一篇用html完成了注册页面,第二篇,我们来完成后台数据处理,需要用......
  • MSE 自治服务帮你快速定位解决 Dubbo 重复订阅导致 RPC 服务注册失败问题
    作者:子葵背景Dubbo是一款RPC服务开发框架,用于解决微服务架构下的服务治理与通信问题,具有易用、超大规模微服务实践、云原生基础设施适配、安全性等特点。但是不正确的Dubbo使用姿势可能会导致Dubbo应用以及ZooKeeper注册中心出现稳定性问题。近期,一线上客户发布时,由于Dub......
  • MSE 自治服务帮你快速定位解决 Dubbo 重复订阅导致 RPC 服务注册失败问题
    作者:子葵背景Dubbo是一款RPC服务开发框架,用于解决微服务架构下的服务治理与通信问题,具有易用、超大规模微服务实践、云原生基础设施适配、安全性等特点。但是不正确的Dubbo使用姿势可能会导致Dubbo应用以及ZooKeeper注册中心出现稳定性问题。近期,一线上客户发布时,由于......
  • 使用 Nacos 做注册中心
    越来越多的国内公司使用SpringCloudAlibaba技术,其产品Nacos功能强大,同时具有注册中心和配置中心的功能。前面的博客已经介绍了如何安装部署Nacos,本篇博客就使用之前部署好的Nacos集群(当然你也可以部署并使用单节点的Nacos),介绍Java程序代码如何使用Nacos作为注册中心......