nacos配置中心,服务发现

2 篇文章 0 订阅
2 篇文章 0 订阅

nacos官网:Nacos Spring Cloud 快速开始

一、项目准备

1、父工程添加依赖管理

<dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Greenwich.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <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>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>2.1.3.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

2.启动nacos并且配置好测试参数

图:A

图:B

二、实现配置中心

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-config</artifactId>
        </dependency>
    </dependencies>

2、配置springboot.yml文件


spring:
  application:
    name: server                                         #服务名
  profiles:
    active: dev                                          #当前环境的属性
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848                      #Nacos服务注册中心地址
        file-extension: yaml                             #指定yaml格式的配置
        namespace: e060a0e9-72c7-4e17-bf5a-e0427458d625  #nacos命名空间
        group: DEFAULT_GROUP                             #配置的分组

注意:

1、配置spring.application.name

它是指我们服务名,在众多微服务中起到唯一性标志作用。而且默认配置下"spring.application.name"的值是nacos配置中心的data-id组成的一部分,它会直接影响到配置中心的取数。

2.文件名是"springboot"如果是"application",有可能出现 ​​​​​​java.lang.reflect.InvocationTargetException: null,依赖版本,配置文档的地址都对了。但还是出现这个错误。_金秋0707的博客-CSDN博客

3、新建ServerController

package com.gdcp.nacos.server1;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.env.Environment;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @ClassName: ServerController
 * @Description TODO
 * @Author sugar
 * @Date 2022/4/1222:51
 */
@RestController
@RequestMapping("/nacos")
public class ServerController {


    @Value("${common.name}")
    private String name;

    @GetMapping("getname")
    public String getName(){
        return name;
    }


}

当spring对ServerController进行实例化时,会根据@value("${common.name}")注解去找到配置中common.name的值。而"common.name"是配置在nacos配置管理如图:B

4、启动 

访问:http://localhost:8080/nacos/getname

说明springboot已经成功从nacos配置管理中取到common.name配置的参数“张三”。实现了微服务配置集中管理。大大提高了维护效率。

三、服务发现

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、配置springboot.yml文件

server:
  port: 8082

spring:
  application:
    name: server2 
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848                     #nacos服务发现地址
        namespace: e060a0e9-72c7-4e17-bf5a-e0427458d625
  profiles:
    active: dev                                         #当前环境的属性

3、添加@EnableDiscoveryClient

在启动文件添加@EnableDiscoveryClient开启服务发现

再看看nacos如图所示:该服务已经被nacos发现了。

 四、Feign远程调用

服务与服务之间通过Feign调用

服务的关系表

序号服务名地址接口功能
1server2
8082/nacos/getproperty
获取服务参数
2server
8080/nacos/getproperty
调用server2服务8082/nacos/getcurrenttime

3和4都是用feign来调用1和2

1、添加openfeign依赖

<dependency>
     <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

2、新建ProviderClient接口

并且加上@FeignClient(value="服务名")注解。

package com.gdcp.nacos.server2.feignclient;

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;

/**
 * @ClassName: ProviderClient
 * @Description
 * @Author sugar
 * @Date 2022/4/1323:58
 */
@FeignClient(value="server")
public interface ProviderClient {

    @GetMapping("/nacos/getcurrenttime")
    String getCurrentTime();

    @GetMapping("/nacos/getproperty")
    String getProperty();


}
@GetMapping("/nacos/getcurrenttime")
    String getCurrentTime();

@GetMapping("/nacos/getproperty")
    String getProperty();

这两个方法就是服务提供者的方法名,以及访问路径。

3、Controller分别为

server


@RestController
@RequestMapping("/nacos")
public class ServerController {
    private static final Logger log= LoggerFactory.getLogger(ServerController.class);
  
    @Autowired
    public ProviderClient feignClient;

    @GetMapping("getproperty")
    public String getProperty(){
        return feignClient.getProperty();
    }



}

server2

@RestController
@RequestMapping("/nacos")
public class ServerController {

    private static final Logger log= LoggerFactory.getLogger(ServerController.class);
    @Autowired
    public ProviderClient feignClient;
    @Autowired
    private Environment env;


    @GetMapping("getproperty")
    public String getProperty(){
        String port = env.getProperty("server.port");
        String active = env.getProperty("spring.profiles.active");
        String name = env.getProperty("spring.application.name");
        return "服务:名"+name+",端口:"+port+",环境:"+active;
    }


}

4、添加@EnableFeignClients

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

 启动两个服务

5、成果

访问server2获取到了服务参数

访问server,结果也取到server2访问的参数,说明成果实现了server服务调用了server2服务。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值