一个欲儿的博客

一个欲儿的博客

Nacos 服务注册、相互调用、网关
2024-12-31

1.环境配置:

nacos-server-2.4.3,下载以后打开bin目录下的startup.cmd文件,将启动模式改为standalone

image.png

然后双击该cmd就可以运行了,运行完成以后打开可以http://192.168.56.1:8848/nacos/index.html 就算成功了

2.新建项目注册到nacos:

返回spring boot新建项目

image.png

image.png

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

image.png

然后添加如下依赖

		<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控制台界面可以看到如下代表成功image.png

然后在该项目中新建一个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中访问如下即为成功

image.png

再新建一个项目叫nacostwo

image.png

image.png

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

image.png

然后回到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中访问测试

image.png

4.网关

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

4.1新建一个项目用作网关

image.png

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

image.png

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

image.png

然后到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的接口测试

image.png

postman中再访问nacosone的接口测试

image.png

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

发表评论: