Nacos 作为服务注册中心和配置中心 简单Demo

一、下载Nacos

https://github.com/alibaba/nacos/releases

二、启动Nacos

解压后双击bin目录下startup.cmd文件启动,注意需要先设置好环境变量JAVA_HOME

访问 localhost:8848/nacos

账户密码都是:nacos

三、配置Nacos

新建goods和member两个配置文件

goods:

member:

四、创建Spring Boot工程

 

分别创建goods和member两个工程,用于服务间调用。

1.引入依赖

goods工程:

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

        <dependency>
            <groupId>com.alibaba.nacos</groupId>
            <artifactId>nacos-client</artifactId>
            <version>1.2.0</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
            <version>2.2.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

 member工程:

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

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
            <version>2.2.0.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>RELEASE</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
            <version>2.2.2.RELEASE</version>
        </dependency>
    </dependencies>

2.修改配置文件

 

将application.properties,改为 bootstrap.yml

goods:

spring:
  cloud:
    nacos:
      server-addr: localhost:8848 #nacos地址
      config:
        group: test #分组。默认为:DEFAULT_GROUP
        namespace: 3e2846b3-747e-408c-8b09-0bf6b386d11e #命名空间,可不填,默认为:public
        prefix: goods  #前缀
        file-extension: yaml   #文件类型
      discovery:
        namespace: 3e2846b3-747e-408c-8b09-0bf6b386d11e #命名空间,可不填,默认为:public
  application:
    name: goods
server:
  port: 8081
feign:
  hystrix:
    enabled: true

member:

spring:
  cloud:
    nacos:
      server-addr: localhost:8848
      config:
        group: test
        namespace: 3e2846b3-747e-408c-8b09-0bf6b386d11e #命名空间,可不填,默认为:public
        prefix: member
        file-extension: yaml
      discovery:
        namespace: 3e2846b3-747e-408c-8b09-0bf6b386d11e #命名空间,可不填,默认为:public
  application:
    name: member
server:
  port: 18081
feign:
  hystrix:
    enabled: true

 

3.新建Controller

Goods工程下:

GoodsController:
@RestController
@RequestMapping("/goods")
@RefreshScope
public class GoodsController {
    @Value("${goods:#{null}}")
    private String goodsName;

    @GetMapping("/getGoods")
    @ResponseBody
    public String getGoods(){
        return goodsName;
    }

    @Autowired
    MemberClient memberClient;

    @GetMapping("/getMember")
    @ResponseBody
    public String getMember(){
        return memberClient.getMember();
    }
}

Member工程下:

MemberController:
@RestController
@RequestMapping("member")
@RefreshScope
public class MemberController {
    @Value("${member:#{null}}")
    private String username;

    @GetMapping("getMember")
    @ResponseBody
    public String getMember(){
        return username;
    }

    @Autowired
    GoodsClient goodsClient;

    @GetMapping("getGoods")
    @ResponseBody
    public String getGoods(){
        return goodsClient.getGoods();
    }
}

 

其中@RefreshScope 用于配置热加载

 

4.新建Client,用于服务间调用

在goods工程中新建MemberClient ,调用member

@FeignClient(value = "member",fallbackFactory = MemberClientFallbackFactory.class)
public interface MemberClient {
    @GetMapping("member/getMember")
    String getMember();
}
@Component
public class MemberClientFallbackFactory implements FallbackFactory<MemberClient> {
    @Override
    public MemberClient create(Throwable throwable) {
        return () -> "Member服务异常";
    }
}

 

在member工程中新建GoodsClient ,调用goods

@FeignClient(value = "goods",fallbackFactory = GoodsClientFallbackFactory.class)
public interface GoodsClient {
    @GetMapping("goods/getGoods")
    String getGoods();
}
@Component
public class GoodsClientFallbackFactory implements FallbackFactory<GoodsClient> {
    @Override
    public GoodsClient create(Throwable throwable) {
        return () -> "Goods服务异常";
    }
}

 

5.启动类加上@EnableFeignClients 注解,启动Feign

6.启动项目

可以看到服务,已经注册到Nacos。

 

7.测试

7.1 在goods测试getGoods和getMember

7.2 在member测试getGoods和getMember

7.3 断掉member服务:

在Goods服务中调用Member服务:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值