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

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

添加依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <scope>runtime</scope>
    <optional>true</optional>
</dependency>

编写配置

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

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

启用注解

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

编写接口

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

@RestController
public class HelloController {

    @Value("${server.port}")
    private String serverPort;

    @GetMapping("/{name}")
    public String hello(@PathVariable String name){
        return "Hello, " + name +"!\nFrom:" + serverPort;
    }
}

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

服务消费者

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

相关依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <scope>runtime</scope>
    <optional>true</optional>
</dependency>

编写配置

server:
  port: 8080
spring:
  application:
    name: cloud-alibaba-consumer
  cloud:
    nacos:
      server-addr: localhost:8848

启用注解

@SpringBootApplication
@EnableDiscoveryClient
public class AliConsumerApplication {
    public static void main(String[] args) {
        SpringApplication.run(AliConsumerApplication.class, args);
    }

    /**
     * 通过查看nacos依赖我们发现已经集成了ribbon,所以我们可以直接使用`@LoadBalanced`注解来开启负载均衡
     * @return
     */
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
}

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

编写接口

@RestController
@RequiredArgsConstructor
public class HelloController {

    private final RestTemplate restTemplate;

    @GetMapping("/consumer/{name}")
    public String hello(@PathVariable String name) {
        return restTemplate.getForObject("http://cloud-alibaba-provider/" + name, String.class);
    }
}

进行测试

启动Nacos

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

启动服务提供者

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

命令行启动方式如下:

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

启动服务消费者

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

访问测试

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

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

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

发布了62 篇原创文章 · 获赞 177 · 访问量 11万+

猜你喜欢

转载自blog.csdn.net/E09620126/article/details/105161725