微服务 – Spring Cloud – Nacos 配置中心

2024-06-27

打开nacos面板新建配置

Data ID: nacos-config-client-dev.yaml

Group: DEV-CLOUD2023

config:
    info: config info lalalal 小魔仙~~~~

引入依赖

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

配置文件

bootstrap.yaml

server:
  port: 9999

spring:
  application:
    name: nacos-config-client
  cloud:
    nacos:
      discovery:
        server-addr: localhost:7848 #服务注册中心地址
      config:
        server-addr: localhost:7848 #配置中心地址
        file-extension: yaml #指定yaml格式的配置
        group: DEV-CLOUD2023

application.yaml

spring:
  profiles:
    active: dev

启动类

@SpringBootApplication
@EnableDiscoveryClient
public class NacosConfigClientMain {

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

}

业务类

@RestController
@RefreshScope
public class NacosConfigController {

    @Value("${config.info}")
    private String configInfo;

    @GetMapping("/config/info")
    public String getConfigInfo() {
        return configInfo;
    }

}

访问 : http://localhost:3377/config/info

config info lalalal 小魔仙~~~~

服务注册

[TOC]

1、引入依赖

父pom依赖

<!--spring cloud alibaba 2.1.0.RELEASE-->
<dependency>
  <groupId>com.alibaba.cloud</groupId>
  <artifactId>spring-cloud-alibaba-dependencies</artifactId>
  <version>2.1.0.RELEASE</version>
  <type>pom</type>
  <scope>import</scope>
</dependency>


子pom依赖


<dependency>
  <groupId>com.alibaba.cloud</groupId>
  <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

2、配置文件

server:
  port: 9001

spring:
  application:
    name: nacos-payment-provider
  cloud:
    nacos:
      discovery:
        server-addr: localhost:7848

management:
  endpoints:
    web:
      exposure:
        include: '*'

3、主启动类

@SpringBootApplication
@EnableDiscoveryClient
public class AlibabaPaymentMain9001 {

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

}

第三部完成 打开nacos 在服务列表即可看到注册进来的服务.

4、业务类 写一个接口供服务发现者使用

@RestController
public class PaymentController {

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

    @GetMapping(value = "/payment/nacos/{id}")
    public String getPayment(@PathVariable("id") Integer id) {
        return "nacos registery , server port: " + serverPort + "\t id: " + id;
    }

}

服务发现

1、引入依赖

<dependency>
  <groupId>com.alibaba.cloud</groupId>
  <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

2、配置文件

server:
  port: 9002

spring:
  application:
    name: nacos-payment-consumner
  cloud:
    nacos:
      discovery:
        server-addr: localhost:7848

management:
  endpoints:
    web:
      exposure:
        include: '*'

3、主启动类

@SpringBootApplication
@EnableDiscoveryClient
public class AlibabaConsumnerMain9002 {

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

}

` 打开nacos 在服务列表即可看到注册进来的服务.`

4、发现第一个服务 并调用第一个服务提供的接口

nacos默认支持负载,因为底层nacos包集成了Ribbon

服务调用用的还是RestTemplate

在第二个服务中,配置RestTemplate

@Configuration
public class ApplicationContextConfig {

    @Bean
    @LoadBalanced
    public RestTemplate getRestTemplate() {
        return new RestTemplate();
    }

}

业务类中调用第一个服务的接口

@RestController
public class ConsumnerController {

    public static final String SERVER_URL = "http://nacos-payment-provider";

    @Resource
    private RestTemplate restTemplate;

    @GetMapping("/consumer/{id}")
    public String paymentInfo(@PathVariable("id") Long id) {
        return restTemplate.getForObject(SERVER_URL + "/payment/nacos/" + id, String.class);
    }

}

访问http://localhost:9002/consumer/1

nacos registery , server port: 9001 id: 1