实现以nacos为注册中心,网关路由转发调用
- 项目版本汇总
- 项目初始化
- 新建仓库
- 拉取仓库项目
- 父工程pom初始化
- 依赖版本选择
- pom文件如下
- 网关服务构建
- pom文件
- 启动类
- 配置文件YML
- nacos启动
- 新建命名空间
- 配置网关yml(nacos)
- 网关服务启动
- 用户服务构建
- pom文件
- 启动类
- 配置文件YML
- 新增url接口
- 配置用户服务yml(nacos)
- 用户服务启动
- 测试路由转发
- 源码地址
项目版本汇总
nacos | 2.1.1 |
---|---|
springCloud | 2021.0.7 |
springboot | 2.6.14 |
spring-cloud-starter-alibaba-nacos-discovery | 2021.1 |
spring-cloud-starter-alibaba-nacos-config | 2021.1 |
项目初始化
新建仓库
可使用github/gitlab/码云等其它代码库,建立自己的项目仓库
我这里使用的是码云
码云地址
拉取仓库项目
git clone 你新建的仓库地址
下载后,用idea打开(这里默认你能配置maven,jdk以及java环境变量的操作)
父工程pom初始化
用途:该pom用于管理整个微服务项目的依赖框架和版本以及所属子模块等
如图所示:该pom.xml在工程的根目录下创建
依赖版本选择
- 进入Spring官网Spring官网选择Project下的Springcloud栏进去
- 版本号对应关系一目了然
- 选择2021.0.x版本的cloud,那么对应的boot版本就是2.6-2.7之间
pom文件如下
spring-cloud-dependencies | cloud依赖 |
---|---|
spring-boot-dependencies | boot依赖 |
nacos-client | nacos版本 |
spring-boot-starter-test | 单测依赖 |
spring-cloud-starter-alibaba-nacos-discovery | 注册中心客户端依赖 |
spring-cloud-starter-alibaba-nacos-config | 配置中心客户端 |
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>2021.0.7</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.6.14</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
<version>2.1.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<version>${boot.version}</version>
<scope>test</scope>
</dependency>
<!--注册中心客户端-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2021.1</version>
</dependency>
<!--配置中心客户端-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>2021.1</version>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.24</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.26</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.3.3</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>${boot.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>2021.0.7</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
网关服务构建
在父工程项目点击右键 New-Module起名为xwl-gateway
pom文件
spring-cloud-starter-gateway | 网关依赖 |
---|---|
spring-cloud-starter-openfeign | rpc通信依赖 |
spring-cloud-starter-bootstrap | cloud配置文件识别依赖 |
spring-cloud-loadbalancer | cloud内置负载均衡器(取代了ribbon) |
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
<version>3.1.7</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>3.1.7</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
<version>3.1.6</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-loadbalancer</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
启动类
@SpringBootApplication
/*开启服务注册中心*/
@EnableDiscoveryClient
public class XwlGatewayApplication {
public static void main(String[] args) {
SpringApplication.run(XwlGatewayApplication.class,args);
}
}
配置文件YML
#端口号
server:
port: 10081
#服务名
spring:
application:
name: xwl-gateway
# NACOS配置链接注册中心
cloud:
nacos:
discovery:
#被发现的服务注册地址
server-addr: 192.168.231.1:8848
#命名空间
namespace: f212727d-d812-4945-9464-0fd0e199459b
config:
server-addr: 192.168.231.1:8848
namespace: f212727d-d812-4945-9464-0fd0e199459b
#绑定配置文件名称前缀(与nacos注册中心上的配置文件名称相关)
prefix: ${spring.application.name}
#组id
group: DEFAULT_GROUP
#nacos配置文件后缀
file-extension: yml
gateway:
discovery:
locator:
enabled: true #开启从注册中心动态创建路由功能
#路由转发配置
routes:
- #以xwl-Authority服务名为唯一标识id
- id: xwl-Authority
# 内置服务转发url 也可以是http请求方式
uri: lb://xwl-Authority
# 匹配器 这里设置的是以xwlAuthority前缀匹配的url都转发到xwl-Authority服务中
predicates:
- Path=/xwlAuthority/**
nacos启动
注:nacos2.0后默认以集群方式启动,这里我们测试方便需要用单机方式启动,需要改个配置,如图所示
将原来的cluster改为standalone
新建命名空间
配置网关yml(nacos)
注意:这里的 Data ID要和配置文件中保持一致
网关服务启动
用户服务构建
在父工程项目点击右键 New-Module起名为xwl-Authority
pom文件
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
<version>3.1.6</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
启动类
@SpringBootApplication
@EnableDiscoveryClient
public class XwlAuthorityApplication {
public static void main(String[] args) {
SpringApplication.run(XwlAuthorityApplication.class,args);
}
}
配置文件YML
server:
port: 10082
spring:
application:
name: xwl-Authority
# NACOS配置链接注册中心
cloud:
nacos:
discovery:
server-addr: 192.168.231.1:8848
namespace: f212727d-d812-4945-9464-0fd0e199459b
config:
server-addr: 192.168.231.1:8848
namespace: f212727d-d812-4945-9464-0fd0e199459b
prefix: ${spring.application.name}
group: DEFAULT_GROUP
file-extension: yml
compatibility-verifier:
enabled: false
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://192.168.231.1:3306/xwlmicroservice
username: root
password: root
新增url接口
package cn.xwl.controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("testAuthority")
public class AuthorityController {
@PostMapping("/getName")
@ResponseBody
public String getName(){
return "ZHANGSAN";
}
}
配置用户服务yml(nacos)
以xwl-Authority.yml为创建Data ID
用户服务启动
测试路由转发
- 访问网关层
- 命中gateway配置文件中的url匹配器,从而转发xwl-Authority服务
- 发送http请求到xwl-Authority服务命中具体的url
源码地址
码云仓库地址