1. 服务注册

在没有微服务的情况所有的代码都是统一部署,这样维护、更新会比较麻烦
image.png

拆分成微服务后程序耦合性大大降低,每个团队能够自主开发自主部署,那么服务A要调用B就要用到服务治理
image.png

1.1 部署nacos服务

nacos有很多版本,本测试采用的为window版 nacos1.2.1 ,下载地址:
nacos-server-1.2.1.zip

打开bin下startup.cmd便启动服务

1.2 创建子工程provider

new —> Module …
jdk选择1.8
image.png

1.3 修改pom

1.3.1 修改pom默认parent为父项目

  1. <parent>
  2. <groupId>com.jili</groupId>
  3. <artifactId>springcloudalibaba</artifactId>
  4. <version>0.0.1-SNAPSHOT</version>
  5. </parent>

1.3.2 添加nacos服务

  1. <dependency>
  2. <groupId>com.alibaba.cloud</groupId>
  3. <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
  4. <version>2.2.1.RELEASE</version>
  5. </dependency>

1.4 修改配置文件application

习惯性会把application后缀改为yaml/yml

配置nacos服务器地址

  1. spring:
  2. cloud:
  3. nacos:
  4. discovery:
  5. server-addr: localhost:8848
  6. application:
  7. name: provider
  8. server:
  9. port: 8082

1.5 效果

地址栏访问nacos服务器http://localhost:8848/nacos/index.html
image.png
image.png

2. 发现服务

创建一个消费者来读取注册,这里consumer就作为服务的调用者来发现注册在nacos的服务

2.1 创建子工程consumer

new —> Module …
image.png

2.2 修改pom

2.2.1替换默认父依赖

  1. <parent>
  2. <groupId>com.jili</groupId>
  3. <artifactId>springcloudalibaba</artifactId>
  4. <version>0.0.1-SNAPSHOT</version>
  5. </parent>

2.2.2 添加nacos服务

  1. <dependency>
  2. <groupId>com.alibaba.cloud</groupId>
  3. <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
  4. <version>2.2.1.RELEASE</version>
  5. </dependency>

2.3 创建控制类

image.png

  1. package com.jili.controller;
  2. import org.springframework.beans.factory.annotation.Autowired;
  3. import org.springframework.cloud.client.ServiceInstance;
  4. import org.springframework.cloud.client.discovery.DiscoveryClient;
  5. import org.springframework.web.bind.annotation.GetMapping;
  6. import org.springframework.web.bind.annotation.RestController;
  7. import java.util.List;
  8. @RestController
  9. public class ConsumerController {
  10. @Autowired
  11. private DiscoveryClient discoveryClient;
  12. @GetMapping("/instances")
  13. public List<ServiceInstance> instance(){
  14. List<ServiceInstance> provider = this.discoveryClient.getInstances("provider");
  15. return provider;
  16. }
  17. }

instance()返回已经注册的全部实例集合

2.4 效果

image.png
image.png