| git仓库地址(https) | https://github.com/zq2599/blog_demos.git | 该项目源码的仓库地址,https协议 |
| git仓库地址(ssh) | git@github.com:zq2599/blog_demos.git | 该项目源码的仓库地址,ssh协议 |
- 这个git项目中有多个文件夹,本篇的源码在spring-cloud-tutorials文件夹下,如下图红框所示:
准备工作
-
正式开始前需要再做一点准备工作,整个《Spring Cloud Gateway实战》系列中,所有请求最后都会被路由到provider-hello这个web上去,该服务目前只有一个web接口/hello/str,现在咱们再给它增加一个,后面的实战会用到
-
新增加的web接口来自LBTest.java,可见非常简单:
package com.bolingcavalry.provider.controller;
import com.bolingcavalry.common.Constants;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.text.SimpleDateFormat;
import java.util.Date;
@RestController
@RequestMapping(“/lbtest”)
public class LBTest {
private String dateStr(){
return new SimpleDateFormat(“yyyy-MM-dd hh:mm:ss”).format(new Date());
}
/**
-
返回字符串类型
-
@return
*/
@GetMapping(“/str”)
public String helloStr() {
return Constants.LB_PREFIX + ", " + dateStr();
}
}
- 上述代码中的Constants.LB_PREFIX来自子工程common:
package com.bolingcavalry.common;
public interface Constants {
String HELLO_PREFIX = “Hello World”;
String LB_PREFIX = “Load balance”;
}
-
写完代码后,先确保nacos已经启动
-
在启动provider-hello工程,启动成功后去看nacos,确认已经注册:
- 准备完毕,可以开始实战了
目标地址支持用服务名(取代之前的IP+端口)
- 咱们从最简单的开始,先看前文的路由配置,如下图红框,目标地址是IP+端口:
-
玩过Spring Cloud的您自然看出了问题所在:没有注册发现,确实,这样将地址和端口写死在配置文件中是不合适的,咱们先来解决这个问题;
-
新增名为gateway-by-loadbalance的子工程,其pom.xml中的依赖情况如下,可见重点是spring-cloud-starter-loadbalancer:
com.bolingcavalry
common
${project.version}
org.springframework.cloud
spring-cloud-starter-gateway
io.projectreactor
reactor-test
test
org.springframework.boot
spring-boot-starter-test
test
org.springframework.cloud
spring-cloud-starter-loadbalancer
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-discovery
-
启动类的代码省去了(和前文的一样)
-
配置信息如下,重点是uri的值lb://provider-hello,用了前缀lb:,后面的provider-hello就是在nacos注册的服务名:
server:
#服务端口
port: 8085
spring:
application:
name: gateway-by-loadbalance
cloud:
nacos:
注册中心的配置
discovery:
server-addr: 127.0.0.1:8848
gateway:
routes:
- id: path_route_lb
uri: lb://provider-hello
predicates:
- Path=/lbtest/**
- 单元测试类:
package com.bolingcavalry.gateway;
import com.bolingcavalry.common.Constants;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.reactive.AutoConfigureWebTestClient;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.http.MediaType;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import org.springframework.test.web.reactive.server.WebTestClient;
import static org.junit.jupiter.api.Assertions.assertTrue;
@SpringBootTest
@ExtendWith(SpringExtension.class)
@AutoConfigureWebTestClient
public class HelloTest {
@Autowired
private WebTestClient webClient;
@Test
void testLoadBalance() {
webClient.get()
.uri(“/lbtest/str”)
.accept(MediaType.APPLICATION_JSON)
.exchange()
// 验证状态
.expectStatus().isOk()
// 验证结果,注意结果是字符串格式
.expectBody(String.class).consumeWith(result -> assertTrue(result.getResponseBody().contains(Constants.LB_PREFIX)));
}
}
- 运行单元测试,通过,可见上述配置可以通过前缀lb:准确找到服务:
支持在nacos上配置
-
将所有配置信息写在application.yml中有个问题:不能远程配置,这在应用数量较多的场景就不方便了,好在nacos提供了远程配置的能力,应用启动后可以从nacos取得自己的配置信息,咱们来试试
-
新增名为gateway-nacos-config的子工程,其pom.xml中的依赖情况如下,请注意里面的中文注释,每指明了每一个依赖的作用:
com.bolingcavalry
common
${project.version}
org.springframework.cloud
spring-cloud-starter-gateway
io.projectreactor
reactor-test
test
org.springframework.boot
spring-boot-starter-test
test
org.springframework.cloud
spring-cloud-starter-bootstrap
org.springframework.cloud
spring-cloud-starter-loadbalancer
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-config
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-discovery
- 本地的配置文件bootstrap.yml,非常简单,就是nacos的地址和远程配置信息:
spring:
application:
name: gateway-nacos-config
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848
file-extension: yml
group: DEFAULT_GROUP
- 接下来再nacos增加一个配置文件,操作如下图红框:
- 增加一个配置,要注意的地方如下(配置信息的文本稍后给出,便于复制):
- 上图中完整的配置信息如下:
server:
port: 8083
spring:
cloud:
gateway:
routes:
- id: path_route_addr
uri: http://127.0.0.1:8082
predicates:
-
Path=/hello/**
-
id: path_route_lb
uri: lb://provider-hello
predicates:
- Path=/lbtest/**
- 测试类中的两个测试方法如下所示,和前面没有任何区别:
@Test
void testHelloPredicates() {
webClient.get()
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

最后
即使是面试跳槽,那也是一个学习的过程。只有全面的复习,才能让我们更好的充实自己,武装自己,为自己的面试之路不再坎坷!今天就给大家分享一个Github上全面的Java面试题大全,就是这份面试大全助我拿下大厂Offer,月薪提至30K!
我也是第一时间分享出来给大家,希望可以帮助大家都能去往自己心仪的大厂!为金三银四做准备!
一共有20个知识点专题,分别是:
Dubbo面试专题
JVM面试专题
Java并发面试专题
Kafka面试专题
MongDB面试专题
MyBatis面试专题
MySQL面试专题
Netty面试专题
RabbitMQ面试专题
Redis面试专题
Spring Cloud面试专题
SpringBoot面试专题
zookeeper面试专题
常见面试算法题汇总专题
计算机网络基础专题
设计模式专题
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
专题**
[外链图片转存中…(img-b8ORrXA4-1713298801454)]
Redis面试专题
[外链图片转存中…(img-o5rrTkJP-1713298801455)]
Spring Cloud面试专题
[外链图片转存中…(img-VKZb4nH1-1713298801455)]
SpringBoot面试专题
[外链图片转存中…(img-99OGMIqg-1713298801455)]
zookeeper面试专题
[外链图片转存中…(img-5PMTS1p8-1713298801455)]
常见面试算法题汇总专题
[外链图片转存中…(img-qbuezfnM-1713298801455)]
计算机网络基础专题
[外链图片转存中…(img-k6DwgbIq-1713298801455)]
设计模式专题
[外链图片转存中…(img-kygWMfjb-1713298801456)]
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!