Spring Cloud 学习 - Nacos服务注册与发现

青旅半醒 2023-05-28 08:21 88阅读 0赞

Spring Cloud 学习 - Nacos服务注册与发现

Nacos,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
本文将介绍Nacos作为服务注册中心与Spring Cloud的整合实例。

关于Nacos的安装请参考 Nacos之单机版安装 或 Nacos高可用集群搭建+MySQL持久化

Nacos的详细介绍可以查阅官网 https://nacos.io/zh-cn/index.html,这里不多介绍~~

主要版本

本文使用的相关技术主要依赖版本如下:
















Spring Cloud Spring Cloud Alibaba Spring Boot
Hoxton.SR3 2.2.0.RELEASE 2.2.5.RELEASE

好了,下边开始进入代码整合环节~~

服务提供者

首先我们新建一个服务提供者spring-cloud-alibaba-provider

添加依赖

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-web</artifactId>
  4. </dependency>
  5. <dependency>
  6. <groupId>com.alibaba.cloud</groupId>
  7. <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
  8. </dependency>
  9. <dependency>
  10. <groupId>org.springframework.boot</groupId>
  11. <artifactId>spring-boot-devtools</artifactId>
  12. <scope>runtime</scope>
  13. <optional>true</optional>
  14. </dependency>

编写配置

编写yml配置把服务注册到nacos注册中心

  1. server:
  2. port: 8801
  3. spring:
  4. application:
  5. name: cloud-alibaba-provider
  6. cloud:
  7. nacos:
  8. server-addr: localhost:8848 # 默认localhost:8848,一致可不写
  9. # server-addr: 192.168.0.14:8800
  10. # 下边这个是devtools热部署插件端口号,为了避免本地开的多个服务端口冲突,所以这里指定一下
  11. devtools:
  12. livereload:
  13. port: 35735

启用注解

  1. @SpringBootApplication
  2. @EnableDiscoveryClient // 启用服务发现功能
  3. public class AliProviderApplication {
  4. public static void main(String[] args) {
  5. SpringApplication.run(AliProviderApplication.class, args);
  6. }
  7. }

编写接口

我们对外提供一个接口,简单的输出Hello, ${name}!

  1. @RestController
  2. public class HelloController {
  3. @Value("${server.port}")
  4. private String serverPort;
  5. @GetMapping("/{name}")
  6. public String hello(@PathVariable String name){
  7. return "Hello, " + name +"!\nFrom:" + serverPort;
  8. }
  9. }

至此,服务提供者基本编好了。
下边编写一个服务消费者

服务消费者

新建一个服务消费者spring-cloud-alibaba-consumer

相关依赖

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-web</artifactId>
  4. </dependency>
  5. <dependency>
  6. <groupId>com.alibaba.cloud</groupId>
  7. <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
  8. </dependency>
  9. <dependency>
  10. <groupId>org.springframework.boot</groupId>
  11. <artifactId>spring-boot-devtools</artifactId>
  12. <scope>runtime</scope>
  13. <optional>true</optional>
  14. </dependency>

编写配置

  1. server:
  2. port: 8080
  3. spring:
  4. application:
  5. name: cloud-alibaba-consumer
  6. cloud:
  7. nacos:
  8. server-addr: localhost:8848

启用注解

  1. @SpringBootApplication
  2. @EnableDiscoveryClient
  3. public class AliConsumerApplication {
  4. public static void main(String[] args) {
  5. SpringApplication.run(AliConsumerApplication.class, args);
  6. }
  7. /** * 通过查看nacos依赖我们发现已经集成了ribbon,所以我们可以直接使用`@LoadBalanced`注解来开启负载均衡 * @return */
  8. @Bean
  9. @LoadBalanced
  10. public RestTemplate restTemplate(){
  11. return new RestTemplate();
  12. }
  13. }

这里我们通过查看spring-cloud-starter-alibaba-nacos-discovery依赖,发现已经集成了Ribbon,那么应该就可以使用Ribbon的负载均衡了。
在这里插入图片描述

编写接口

  1. @RestController
  2. @RequiredArgsConstructor
  3. public class HelloController {
  4. private final RestTemplate restTemplate;
  5. @GetMapping("/consumer/{name}")
  6. public String hello(@PathVariable String name) {
  7. return restTemplate.getForObject("http://cloud-alibaba-provider/" + name, String.class);
  8. }
  9. }

进行测试

启动Nacos

启动服务注册中心Nacos
在这里插入图片描述

启动服务提供者

启动2个服务提供者spring-cloud-alibaba-provider,端口分别为8081和8082:
多个启动可以在控制台指定端口进行启动,也可以在IDEA中复制启动配置,修改端口启动。

命令行启动方式如下:

  1. java -jar yourapp.jar --server.port=8080

启动服务消费者

启动服务消费者spring-cloud-alibaba-consumer

访问测试

使用curl命令行调用结果:
GiJBGD.md.png
可以看到,使用了Ribbon的默认负载均衡策略。

以上便是Spring Cloud使用Nacos服务注册发现与发现的简单应用。

因个人能力有限,文中如有不足或错误之处,欢迎指正,感谢~~

发表评论

表情:
评论列表 (有 0 条评论,88人围观)

还没有评论,来说两句吧...

相关阅读