目录
1.搭建环境
1.1安装nacos
官网下载nacos-server-xxx.tar.gz包,我这里下载的2.2.3版本,tar -xzvf解压,单机命令sh startup.sh -m standalone启动
查看log tail -100f /xxx/nacos/logs/start.out
看到这样的日志就是启动成功了。
如果报jdk不匹配,需要使用1.8的jdk启动,可以修改startup.sh,指定export JAVA_HOME=/usr/local/jdk1.8.0_131/ 环境
访问 http://localhost:8848就可以看到nacos页面了
2.创建项目
2.1创建父项目
创建maven项目,创建parent的pom文件,引入nacos
<?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.7.14</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.test</groupId>
<artifactId>boot-cloud</artifactId>
<version>0.0.1-SNAPSHOT</version>
<!--标记项目只是pom文件-->
<packaging>pom</packaging>
<properties>
<!--指定包版本-->
<java.version>1.8</java.version>
<spring-cloud.version>2021.0.8</spring-cloud.version>
<spring-boot.version>2.7.14</spring-boot.version>
<spring-cloud-alibaba.version>2021.1</spring-cloud-alibaba.version>
</properties>
<dependencyManagement><!--只管理,不导入-->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--nacos-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring-cloud-alibaba.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>
<executions>
<execution>
<id>repackage</id>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
2.2创建 gateway 项目
选择spring Initializr->选择1.8sdk->下一步
下一步直接完成就好,然后修改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>com.test</groupId>
<artifactId>boot-cloud</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>boot_gateway</artifactId>
<name>boot_gateway</name>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<!--增加nacos后必须增加这个导包,动态路由都是基于此实现,不导访问无报错,只是转发不过去,报503-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-loadbalancer</artifactId>
</dependency>
<!--nacos 服务发现-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
然后修改配置文件application.properties为application.yaml,增加配置
server:
port: 8010
spring:
application:
name: gateway
cloud:
nacos:
discovery:
server-addr: ip:8848
# username:
# password:
gateway:
routes:
# routes:
# #id和uri命名不要带_,否则会报错
# - id: boot-test
# uri: lb://boot-test
# predicates:
# - Path=/boot-test/**
# filters:
# # 转发请求时去掉1级前缀,eg:http://localhost:8010/boot-test/test/t中间的boot-test字段会被清掉
# - StripPrefix=1
#上面这些都可以去掉了,因为走nacos动态路由
discovery:
# 路由访问方式:http://Gateway_HOST:Gateway_PORT/serviceId/**,其中微服务应用名默认大写访问
locator:
# 是否与服务发现组件进行结合,通过 serviceId(必须设置成大写) 转发到具体的服务实例。默认为false,设为true便开启通过服务中心的自动根据 serviceId 创建路由的功能。
enabled: true
# 允许通过模块名小写代理
lower-case-service-id: true
给启动类增加服务发现的注解@EnableDiscoveryClient
package com.test.boot_gateway;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@SpringBootApplication
@EnableDiscoveryClient
public class BootGatewayApplication {
public static void main(String[] args) {
SpringApplication.run(BootGatewayApplication.class, args);
}
}
2.3创建服务
创建一个服务项目部署两台来做测试
按照上面gateway的方法创建项目,修改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>com.test</groupId>
<artifactId>boot-cloud</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>boot_test</artifactId>
<name>boot_test</name>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
配置文件增加端口号和nacos配置
server.port=8030
#这个命名不要有_,否则nacos会报错
spring.application.name=boot-test
spring.cloud.nacos.discovery.server-addr=ip:8848
同样,启动类上增加@EnableDiscoveryClient
package com.test.boot_test;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@SpringBootApplication
@EnableDiscoveryClient
public class BootTestApplication {
public static void main(String[] args) {
SpringApplication.run(BootTestApplication.class, args);
}
}
创建测试类:
@RestController
@RequestMapping("/test")
public class Test {
@GetMapping("/t")
public String test(){
return "测试1";
}
}
2.4测试服务连通性
启动gateway项目
启动test项目
修改test端口号,再启动一台
访问http://ip:8848/nacos/index.html#/,查看服务注册情况
看到如图,则服务均已注册到nacos
访问http://localhost:8010/boot-test/test/t,结果会在“测试1”和“测试2”来回切换,说明gateway负载均衡,且可以正常转发,如图