关于springcloud:使用Nacos注册和配置SpringCloud微服务

前言

上篇咱们讲到如何应用k8s搭建nacos,这篇就来讲讲微服务如何通过搭建好的nacos服务注册和配置。

操作

A服务、B服务,A应用Feign调用B服务外面办法。

A、B服务引入相干依赖包,

  • springcloud版本:2020.0.0
  • springboot版本:2.4.2
  • alibaba版本:2021.1

    <parent>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-parent</artifactId>
      <version>2.4.2</version>
    </parent>
    <properties>
      <java.version>1.8</java.version>
      <spring-boot.version>2.4.2</spring-boot.version>
      <spring-cloud.version>2020.0.0</spring-cloud.version>
      <spring-cloud-alibaba.version>2021.1</spring-cloud-alibaba.version>
    </properties>
    <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>
          <!-- spring cloud 依赖 -->
          <dependency>
              <groupId>org.springframework.cloud</groupId>
              <artifactId>spring-cloud-dependencies</artifactId>
              <version>${spring-cloud.version}</version>
              <type>pom</type>
              <scope>import</scope>
          </dependency>
          <!-- spring cloud alibaba 依赖 -->
          <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>
    <dependencies>
      <dependency>
          <groupId>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-starter-openfeign</artifactId>
      </dependency>
      <dependency>
          <groupId>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-starter-loadbalancer</artifactId>
      </dependency>
      <dependency>
          <groupId>com.alibaba.cloud</groupId>
          <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
      </dependency>
      <dependency>
          <groupId>com.alibaba.cloud</groupId>
          <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
      </dependency>
      <dependency>
          <groupId>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-starter-bootstrap</artifactId>
      </dependency>
    </dependencies>
    

    A、B服务注册和配置到Nacos服务的bootstrap.yml文件:

    spring:
    application:
      name: a-service # b-service
    profiles:
      active: test
    cloud:
      nacos:
        #注册A、B服务到Nacos
        discovery:
          server-addr: http://nacos-headless.default.svc.cluster.local:8848
          namespace: xxx-xxx-xxx-xxx
          service: a-service # b-service
        #配置A、B服务到Nacos
        config:
          server-addr: http://nacos-headless.default.svc.cluster.local:8848
          file-extension: yaml
          prefix: a-service # b-service
          namespace: xxx-xxx-xxx-xxx
    server:
    port: a-port # b-port

能够间接在Nacos下面创立A、B服务的配置文件:

B服务办法:

@SpringBootApplication
@EnableDiscoveryClient
@RestController
@RefreshScope
public class BServiceApplication {
    public static void main(String[] args) {
        SpringApplication.run(BServiceApplication.class, args);
    }
    
    @Value("${server.port}")
    String port;

    @GetMapping("/hi")
    public String hi(@RequestParam(value = "name", defaultValue = "forezp",required = false) String name) {
        return "hello " + name + ", i'm provider ,my port:" + port;

    }
}

A服务想要调用B服务办法,首先创立BFeignClient类:

@FeignClient("b-service")
public interface BFeignClient {
    @GetMapping("/hi")
    String hi(@RequestParam(value = "name", defaultValue = "forezp", required = false) String name);
}

接着,创立调用的办法:

@SpringBootApplication
@RestController
@EnableDiscoveryClient
@EnableFeignClients
@RefreshScope
public class AServiceApplication {

    public static void main(String[] args) {
        SpringApplication.run(AServiceApplication.class, args);
    }
    
    @Autowired
    BFeignClient bFeignClient;

    @GetMapping("/hi-feign")
    public String hiFeign(){
        return bFeignClient.hi("feign");
    }
}

运行起来,看看两个服务是否在Nacos注册胜利,如图所示:

注册胜利之后,咱们就能够测试A服务调用B服务是否胜利:

总结

1、因为咱们应用的是service headless,所以咱们要应用dns查找nacos,默认是你的service name 加上固定写法:default.svc.cluster.local,我的nacos service name是nacos-headless,即:nacos-headless.default.svc.cluster.local

2、因为nacos应用的是最新版本,所以discovery要加service属性,否则报错

discovery:
  server-addr: http://nacos-headless.default.svc.cluster.local:8848
  namespace: xxx-xxx-xxx-xxx
  service: a-service  # b-service

3、因为应用的是springcloud:2020.0版本,所以pom引入bootstrap包,否则bootstrap.yml不起作用

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

援用

SpringCloud 2020版本教程1:应用nacos作为注册核心和配置核心
k8s集群外部怎么通过dns域名使得业务零碎注册到nacos集群阐明-方法论,其余通过域名拜访服务一样的
k8s部署nacos 3各节点….N各节点均可 集群
Kubernetes Nacos

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理