SpringCloud之Nacos(手把手教你使用)

  第一代SpringCloud即SpringCloud Netflix很多组件已经停止更新和维护了,迫使我们必须要找到一个可以代替Netflix的第二代产品,这时SpringCloud Alibaba出现了。Nacos是SpringCloud Alibaba的核心组件,它充当了配置中心 + 注册中心的角色。

下载与启动

  github地址:https://github.com/alibaba/nacos/releases
  如果下载不了或者下载太慢,访问这个网盘地址:
  https://pan.baidu.com/s/1qS5Jqn-B-almz9eL6c4uhw?pwd=abcd

  下载解压后,conf文件夹下的nacos-mysql.sql到数据库执行一下(我用的是Mysql8,数据库先建好);表创建好后,编辑下conf文件夹下的application.properties:

在这里插入图片描述

  修改好后,打开cmd窗口,切换到解压目录下的bin文件夹下,运行:

startup.cmd -m standalone

  浏览器访问这个地址:

在这里插入图片描述

  然后输入默认的用户名、密码:nacos、nacos,看到下面这个页面,说明启动成功:

在这里插入图片描述

配置中心

  项目中的一些配置项,直接就放到nacos中了。需要在浏览器打开的nacos管理页面上,手动创建:

在这里插入图片描述
在这里插入图片描述

  之后我们在idea中创建SpringCloud项目,创建bootstrap.yml:

在这里插入图片描述

  spring.cloud.nacos.config.server-addr指定nacos的地址,这个模块和nacos中创建的配置文件如何对应呢?在于截图中的三个配置:spring.application.name + “-” + spring.profiles.active + “.” + spring.cloud.nacos.config.file-extension,对于如上的配置,就是nacos_config-dev.yml。项目启动后,会去nacos的配置列表里查找,查找Data Id为nacos_config-dev.yml的配置。
  上面说的查找方式不太完整,完整的是按照命名空间 - group - Data Id查找。命名空间、group由bootstrap.yml中spring.cloud.nacos.config.namespace、spring.cloud.nacos.config.group来指定,默认值是public、DEFAULT_GROUP。我们刚才创建的配置,是在public命名空间下、DEFAULT_GROUP group下的,所以没有配置用默认值刚好能对应上。读者也可以在nacos中再创建个命名空间、或者换个group来试下。

在这里插入图片描述
在这里插入图片描述

  代码层面,首先引入依赖:

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

  然后取值,建一个控制器:

import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("/user")
@RefreshScope
public class UserController {

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

    @Value("${person.age}")
    private Integer age;


    @GetMapping("/sayHello")
    public void sayHello() {
        System.out.println("name:" + name + "," + "age:" + age);
    }

}

  类上的@RefreshScope用来自动刷新。如果nacos上的配置修改了,代码中获取的值也能同步更新,不用重启服务。

注册中心

  在bootstrap.yml中配置:

在这里插入图片描述

  核心的就是spring.application.name(指定服务名称)和spring.cloud.nacos.discovery.server-addr这2个注解。当然和配置中心一样,也有命名空间和group,由spring.cloud.nacos.discovery.namespace和spring.cloud.nacos.discovery.group指定,默认值为public和DEFAULT_GROUP。

  引入依赖:

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

  然后直接运行启动类,启动项目即可。之前较低版本,启动类上还要添加@EnableDiscoveryClient注解,现在高版本不需要了。启动后,我们就能够在nacos管理页面看到:

在这里插入图片描述
  和配置中心类似,某一服务想要调用另一服务的接口,也是命名空间 - group - 服务名称查找。也就是,两个服务在同一命名空间、group相同的情况下,能够互相通信了。

  服务提供方(nacos-provider服务对应的模块)提供方法:

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@RequestMapping("/provide")
public class ProviderController {

    @RequestMapping("/distribute")
    @ResponseBody
    public String distribute() {
        return "发鸡胸肉";
    }

}

  服务调用方(另一模块,pom.xml引入同样的依赖:spring-cloud-starter-alibaba-nacos-discovery),启动类添加:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;

@SpringBootApplication
public class NacosConfigApplication {

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

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

}

  调用提供方方法:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.client.RestTemplate;

@Controller
@RequestMapping("/user")
public class UserController {

    @Autowired
    private RestTemplate restTemplate;


    @GetMapping("/invoke")
    public void invoke() {
        String str = restTemplate.getForObject("http://nacos-provider/" +
        "nacosProvider/provide/distribute", String.class);
        System.out.println(str);
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值