Spring boot2X集成zuul与consul实现负载均衡和反向代理
2023-09-14 09:00:00 时间
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"; } }
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
相关文章
- 几张图搞定Spring Cloud Allibaba注册中心的架构原理
- Spring 全家桶之 Spring Boot 2.6.4(九)- 启动流程解析
- 关于spring boot自动注入出现Consider defining a bean of type ‘xxx‘ in your configuration问题解决方案
- 简单介绍一下spring bean的生命周期_Spring bean的生命周期
- spring注解有哪些_Spring 注解
- 系统架构演进与Spring Cloud Alibaba微服务架构体系
- 面试突击87:说一下 Spring 事务传播机制?
- 一个用来深度学习并实战 Spring Boot 的项目,共 66 个集成demo
- GraphQL实践2——Spring-GraphQL集成JPA与MySQL
- 一文讲透Spring的IOC反转控制
- Spring监听器-spring源码详解(五)
- Spring 事务管理详解
- 关于Spring Cloud Gateway与下游服务器的连接分析
- 阿里面试官:说说 Spring 源码中 BeanFactory 的创建流程
- Spring Boot3.0升级,踩坑之旅,附解决方案(二)
- 分布式系统开发实战:基于Spring Security实现安全认证
- Spring Boot 如何集成JWT实现Token验证
- 集成Eureka与其他Spring Cloud组件
- 阿里架构师吐血整理,这是对“Spring家族”最完美的诠释
- Spring Cloud Stream应用程序开发-集成Spring Boot应用程序示例
- Spring Cloud Stream与Kafka集成
- Spring Cloud Security与Spring Cloud的集成示例
- Spring Cloud Security配置JWT和OAuth2的集成实现授权管理(一)
- 配置Spring Cloud Bus并集成消息代理
- Spring 中获取 request 的几种方法,及其线程安全性分析详解编程语言
- spring boot详解编程语言
- Spring Boot 如何快速集成 Redis 哨兵?
- Spring Boot 中的 ApplicationRunner 和 CommandLineRunner