Spring boot2X集成zuul与consul实现负载均衡和反向代理总结

你猜 阅读:211 2021-06-16 22:16:36 评论:0

zuul 是netflix开源的一个API Gateway 服务器

所有从设备或网站来的请求都会经过Zuul到达后端的Netflix应用程序。

作为一个边界性质的应用程序,Zuul提供了动态路由、监控、弹性负载和安全功能。

实现反向代理

1.服务注册发现中心Consul

启动

consul agent -dev

2.服务端

provider和provider1

spring boot 版本 2.2.1.RELEASE

(1)添加依赖

<properties> 
        <java.version>1.8</java.version> 
        <spring-cloud.version>Greenwich.SR3</spring-cloud.version> 
    </properties> 
 
    <dependencies> 
        <dependency> 
            <groupId>org.springframework.boot</groupId> 
            <artifactId>spring-boot-starter-web</artifactId> 
        </dependency> 
 
        <dependency> 
            <groupId>org.springframework.cloud</groupId> 
            <artifactId>spring-cloud-starter-consul-discovery</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>

(2)配置

server.port=8010 
 
spring.application.name=service-provider 
spring.cloud.consul.host=localhost 
spring.cloud.consul.port=8500 
spring.cloud.consul.discovery.health-check-path=/actuator/health 
spring.cloud.consul.discovery.service-name=${spring.application.name} 
spring.cloud.consul.discovery.heartbeat.enabled=true 
 
management.endpoints.web.exposure.include=* 
management.endpoint.health.show-details=always

(3)测试方法

package com.xyz.provider.controller; 
 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RestController; 
 
@RestController 
public class demoController { 
    @RequestMapping("/hello") 
    public String Hello(){ 
        return "hello,provider"; 
    } 
 
}

(4)启动类

package com.xyz.provider; 
 
import org.springframework.boot.SpringApplication; 
import org.springframework.boot.autoconfigure.SpringBootApplication; 
import org.springframework.cloud.client.discovery.EnableDiscoveryClient; 
 
@EnableDiscoveryClient 
@SpringBootApplication 
public class ProviderApplication { 
 
    public static void main(String[] args) { 
        SpringApplication.run(ProviderApplication.class, args); 
    } 
 
}

provide1的

server.port=8011

测试方法

package com.xyz.provider1.controller; 
 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RestController; 
 
@RestController 
public class demoController { 
    @RequestMapping("/hello") 
    public String Hello(){ 
        return "hello,another provider"; 
    } 
 
}
View Code

3.网关

zuul

Spring boot版本 2.1.8.RELEASE

上面用的Spring boot版本为 2.2.1.RELEASE

但是启动时遇到了报错,因此改成了这个版本(报错问题

(1)添加依赖

<properties> 
        <java.version>1.8</java.version> 
        <spring-cloud.version>Greenwich.SR2</spring-cloud.version> 
    </properties> 
 
    <dependencies> 
        <dependency> 
            <groupId>org.springframework.cloud</groupId> 
            <artifactId>spring-cloud-starter-netflix-zuul</artifactId> 
        </dependency> 
 
        <dependency> 
            <groupId>org.springframework.cloud</groupId> 
            <artifactId>spring-cloud-starter-consul-discovery</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>

(2)添加配置

server.port=8090 
 
spring.application.name=service-zuul 
spring.cloud.consul.host=localhost 
spring.cloud.consul.port=8500 
spring.cloud.consul.discovery.service-name=${spring.application.name} 
spring.cloud.consul.discovery.instance-id=${spring.application.name}:${server.port} 
management.endpoints.web.exposure.include=* 
management.endpoint.health.show-details=always 
 
zuul.routes.api.path=/api/** 
zuul.routes.api.serviceId=service-provider

(3)启动类

package com.xyz.zuul; 
 
import org.springframework.boot.SpringApplication; 
import org.springframework.boot.autoconfigure.SpringBootApplication; 
import org.springframework.cloud.client.discovery.EnableDiscoveryClient; 
import org.springframework.cloud.netflix.zuul.EnableZuulProxy; 
 
@EnableZuulProxy 
@SpringBootApplication 
public class ZuulApplication { 
 
    public static void main(String[] args) { 
        SpringApplication.run(ZuulApplication.class, args); 
    } 
 
}

启动Consul

启动provider、provider1

启动 zuul

访问http://127.0.0.1:8090/api/hello

结果输出:

  hello,provider和hello,another provider

结果交替出现的,负载均衡器采用的是轮询的方式

 示例 https://gitee.com/babybeibeili/zuul_consul.git


标签:java
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

发表评论
搜索
排行榜
KIKK导航

KIKK导航

关注我们