springcloud之nacos服务发现及配置中心

2.服务发现

源码:https://gitee.com/myha/spring-cloud-study-demo/tree/master/nacos

2.1父工程

新建一个名为nacos的父工程,pom文件如下

<properties>
    <maven.compiler.source>17</maven.compiler.source>
    <maven.compiler.target>17</maven.compiler.target>
    <java.version>17</java.version>
    <spring.boot.version>2.6.3</spring.boot.version>
    <spring.cloud.version>2021.0.1</spring.cloud.version>
    <spring.cloud.alibaba.version>2021.0.1.0</spring.cloud.alibaba.version>
</properties>

<!--包含两个子模块,服务提供方和服务消费方-->
<modules>
    <module>nacos-service-provider</module>
    <module>nacos-service-consumer</module>
</modules>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>${spring.boot.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>${spring.cloud.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-dependencies</artifactId>
            <version>${spring.cloud.alibaba.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

这里需要注意的是 Spring Boot、 Spring Cloud 、 Spring Cloud Alibaba 版本对应关系,具体可以参考:

https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E

2.2服务提供方 (Provider)

2.2.1引入依赖

<dependencies>
    <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>
</dependencies>

2.2.2配置

spring:
  application:
    name: demo-service-provider
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848

server:
  port: 8006

2.2.3对外接口

编写一个对外接口/echo,代码如下

@EnableDiscoveryClient
@SpringBootApplication
public class NacosServiceProviderApplication {

    public static void main(String[] args) {
        SpringApplication.run(NacosServiceProviderApplication.class, args);
    }

    @RestController
    static class TestController {

        @GetMapping("/echo")
        public String echo(String name) {
            return "provider:" + name;
        }

    }
}

@EnableDiscoveryClient 注解可以用在 Spring Boot 应用的启动类上,表示该应用是一个服务提供者或者服务消费者,并且需要通过注册中心进行服务发现。当应用启动时,该注解会自动注册该应用到注册中心,并且从注册中心获取其他服务的信息。

其实nacos可以不使用这个注解, 在 Nacos 中,可以直接使用 Nacos 提供的 Java SDK 或者 REST API 来进行服务注册和发现。

启动一下程序

在这里插入图片描述

我们也可以打开访问http://127.0.0.1:8848/nacos,

在这里插入图片描述

说明服务已经注册到nacos中

2.3服务消费方 (Consumer)

2.3.1引入依赖

<dependencies>
    <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.cloud</groupId>
        <artifactId>spring-cloud-starter-loadbalancer</artifactId>
    </dependency>
</dependencies>

2.3.2配置

spring:
  application:
    name: demo-service-consumer
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848

server:
  port: 8007

2.3.3消费接口

最后写一个接口调用服务方提供的接口

@SpringBootApplication
public class NacosServiceConsumerApplication {
    @LoadBalanced
    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }

    public static void main(String[] args) {
        SpringApplication.run(NacosServiceConsumerApplication.class, args);
    }

    @RestController
    public class TestController {

        private final RestTemplate restTemplate;

        @Autowired
        public TestController(RestTemplate restTemplate) {this.restTemplate = restTemplate;}

        @GetMapping("/echo")
        public String echo(String str) {
            return restTemplate.getForObject("http://demo-service-provider/echo?name=" + str, String.class);
        }
    }
}

@LoadBalanced 是 Spring Cloud 中的一个注解,用于启用负载均衡功能。负载均衡是指将请求分发到多个服务实例中,以达到提高系统可用性和性能的目的。

在 Spring Cloud 中,可以通过 RestTemplate 或者 WebClient 来进行服务调用。使用 @LoadBalanced 注解,可以让 RestTemplate 或者 WebClient 具备负载均衡的能力,从而根据负载均衡算法自动选择服务实例进行调用。

在浏览器中访问http://localhost:8007/echo?str=success

最后浏览器中打印 ” provider:success “

3.配置中心

新建一个名为nacos-service-config的子工程

nacos父工程pom文件需要引进改子模块

<modules>
    <module>nacos-service-provider</module>
    <module>nacos-service-consumer</module>
    <!--配置中心子模块-->
    <module>nacos-service-config</module>
</modules>

3.1引入依赖

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
	
    <!--nacos配置管理依赖-->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    </dependency>
	
    <!--识别名为bootstrap配置-->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-bootstrap</artifactId>
    </dependency>

</dependencies>

3.2配置

新建一个名字为bootstrap.yaml的配置文件,内容如下

spring:
  application:
    name: demo-service-config
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848
        file-extension: yaml
        namespace: dev

server:
  port: 8008

说明:之所以需要配置 spring.application.name ,是因为它是构成 Nacos 配置管理 dataId字段的一部分

  • prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。
  • spring.profiles.active 即为当前环境对应的 profile。 注意:当 spring.profiles.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 ${prefix}.${file-extension}
  • file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 propertiesyaml 类型。

由此可以知道我们的dataId就是demo-service-config.yaml

那我们登录http://127.0.0.1:8848/nacos,创建一个名为demo-service-config.yaml的配置

在这里插入图片描述

内置内容如下

在这里插入图片描述

3.3测试例子

@SpringBootApplication
public class NacosServiceConfigApplication {

    public static void main(String[] args) {
        SpringApplication.run(NacosServiceConfigApplication.class, args);
    }

    @RestController
    public class TestController {
        @Value("${username}")
        private String username;
		
        //获取配置的username的值
        @GetMapping("/echo")
        public String echo() {
            return username;
        }
    }
}

打开浏览器访问:http://localhost:8008/echo

最后打印出“test”,说明获取nacos的配置成功

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值