Nacos 服务注册、相互调用、网关
1.环境配置:
nacos-server-2.4.3,下载以后打开bin目录下的startup.cmd文件,将启动模式改为standalone

然后双击该cmd就可以运行了,运行完成以后打开可以http://192.168.56.1:8848/nacos/index.html 就算成功了
2.新建项目注册到nacos:
返回spring boot新建项目


修改pom文件中的spring boot的版本为2.7.6

然后添加如下依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2021.0.4.0</version>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2021.0.4.0</version>
<type>pom</type>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>3.1.4</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
<version>3.1.4</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
<version>3.1.4</version>
</dependency>
如果你需要添加mybatis之类的相关组件,因为版本配置起来很复杂,各个版本不兼容的问题,我可以推荐一套供你参考,这套我实测过是可以用的,但是这里我就不演示了,因为用不上我就不导入项目了
<!--mysql连接驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!--mybatis-plus系列-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.7</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter-test</artifactId>
<version>3.5.7</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.5.7</version>
</dependency>
找到application.properties
spring.application.name=nacosone
spring.mvc.pathmatch.matching-strategy: ant-path-matcher
# Nacos 服务地址
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
# 如果需要,设置 Nacos 配置中心的相关地址
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
server.port=9091
启动该程序后到nacos控制台界面可以看到如下代表成功
然后在该项目中新建一个userop代码如下
package com.nacosone;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RequestMapping("/one")
@RestController
public class userop {
@GetMapping("/find")
public String find() {
return "ni hao wo shi nacosone";
}
}
然后重启项目,在postman中访问如下即为成功

再新建一个项目叫nacostwo


pom修改如nacosone,也添加一个userop,代码如下
package com.nacostwo;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.GetMapping;
@RequestMapping("/two")
@RestController
public class userop {
@GetMapping("/test")
public String test() {
return "this is nacos two";
}
}
3.微服务之间互相调用接口
介绍工具是feign,这个是nacos自带的微服务之间互相调用接口的工具,假设我们要在nacostwo调用nacosone的find接口,我们应该如何操作呢?
首先到nacosone的主类添加一个注解,同样的在nacostwo的主类也加上这样一个注解
@EnableFeignClients

然后回到nacostwo项目新建一个接口(interface)文件,文件名为feignone,代码如下
package com.nacostwo;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
@FeignClient(name = "nacosone")
public interface feignone {
@GetMapping("/one/find")
String find();
}
然后我们再修改nacostwo的userop如下
package com.nacostwo;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.GetMapping;
@RestController
@RequestMapping("/two")
public class userop {
private final feignone feignone;
public userop(feignone feignone) {
this.feignone=feignone;
}
@GetMapping("/test")
public String test() {
return "this is nacos two";
}
@GetMapping("find")
public String useonefind() {
return feignone.find();
}
}
postman中访问测试

4.网关
如果项目多起来,每个项目都是一个服务,每个服务的端口不一样,用户是记不住的,用户只能记住路径,所以我们需要添加网关,让nacos自动分配请求到指定的微服务去,比如nacosone是9091,nacostwo是9092,用户访问/one/find自动分配到9091端口,/two/find自动分配到9092端口
4.1新建一个项目用作网关

这里什么都不要勾选,千万注意尤其不要勾选spring web

pom文件依然是修改spring boot版本为2.7.6
然后添加如下依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2021.0.4.0</version>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2021.0.4.0</version>
<type>pom</type>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>3.1.4</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
<version>3.1.4</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
<version>3.1.4</version>
</dependency>
千万记住网关项目会多一个网关依赖(gateway)
然后到nacoswangguan的主类,添加如下注解
@EnableDiscoveryClient

然后到application.properties
spring.application.name=nacoswangguan
# 服务端口
server.port=9090
# nacos服务地址
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
#使用服务发现路由
spring.cloud.gateway.discovery.locator.enabled=true
spring.cloud.gateway.routes[0].id=nacosone
spring.cloud.gateway.routes[0].uri=lb://nacosone
spring.cloud.gateway.routes[0].predicates[0]=Path=/one/**
spring.cloud.gateway.routes[1].id=nacostwo
spring.cloud.gateway.routes[1].uri=lb://nacostwo
spring.cloud.gateway.routes[1].predicates[0]=Path=/two/**
然后启动三个项目,让网关在前面两个服务启动完成后再启动
postman中访问nacostwo的接口测试

postman中再访问nacosone的接口测试

可以看到用户没有输入9091端口或者9092端口,而是由nacos自动分配请求到相应端口
