Nacos 服务注册、相互调用、网关
2024-12-31
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自动分配请求到相应端口
发表评论: