前言

上篇咱们讲到如何应用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-serviceprofiles:  active: testcloud:  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-xxxserver:port: a-port # b-port

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

B服务办法:

@SpringBootApplication@EnableDiscoveryClient@RestController@RefreshScopepublic 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@RefreshScopepublic 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