文章目录

  • 一、服务的提供者与服务的消费者
  • 二、服务发现原理
  • 三、什么是Nacos?
  • 四、搭建Nacos Server
  • 1、**下载Nacos** [下载地址](https://github.com/alibaba/nacos/releases)
  • 2、搭建Nacos Server
  • 五、将应用注册到Nacos
  • 1、将user-content注册到Nacos
  • 2、将content-center注册到Nacos
  • 3、在content-center下编写测试代码
  • 六、为内容中心引入服务发现
  • 七、Nacos服务发现的领域模型
  • 八、Nacos元数据


一、服务的提供者与服务的消费者

名词

定义

服务的提供者(Server端

服务的被调用方(即为其他微服务提供接口的微服务)

服务的消费者(Client端

服务的调用方(即调用其他微服务接口的微服务)

二、服务发现原理

如果用户中心地址发生变化怎么办?
服务的消费者总能找到服务的提供者的这种原理,即服务发现原理。




nacos版本对应java nacos版本查看_用户中心



nacos版本对应java nacos版本查看_nacos版本对应java_02


三、什么是Nacos?

Nacos文档地址请查看引入Nacos,架构的演进



nacos版本对应java nacos版本查看_nacos版本对应java_03


四、搭建Nacos Server

1、下载Nacos 下载地址

spring-cloud-alibaba-dependencies下按住Ctrl+鼠标左键,查看Nacos组件相关的版本。

<nacos.client.version>1.0.0</nacos.client.version>
    <nacos.config.version>0.8.0</nacos.config.version>

nacos-server-1.0.1是兼容nacos-server-1.0.0的,所以我这里选用nacos-server-1.0.1版本。

2、搭建Nacos Server

Nacos 快速开始

五、将应用注册到Nacos

1、将user-content注册到Nacos

pom.xml添加

<!--spring-cloud-starter-{spring cloud子项目名称}-[{模块名称}]-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

application.yml添加

cloud:
    nacos:
      discovery:
        #指定nacos server的地址
        server-addr: localhost:8848
  application:
    # 服务名称尽量用-,不用要_,更不要用特殊字符
    name: user-center

启动服务

在此之前,你应该先启动nacos-server

nacos版本对应java nacos版本查看_服务发现_04


登录查看注册的服务

nacos版本对应java nacos版本查看_用户中心_05

2、将content-center注册到Nacos

按照user-center将content-center注册到Nacos

在此刷新页面,我们可以看到

nacos版本对应java nacos版本查看_微服务_06

3、在content-center下编写测试代码

在TestController下添加如下代码

@Autowired
    private DiscoveryClient discoveryClient;
	 /**
     * 测试:服务发现,证明内容中心可以查找到用户中心
     * @return 用户中心所有地址的详细信息
     */
    @GetMapping("/test2")
    public List<ServiceInstance> getInstances(){
        // 查询指定服务所有实例的信息
        return this.discoveryClient.getInstances("user-center");
    }

在浏览器下进行测试

nacos版本对应java nacos版本查看_服务发现_07


开启用户中心多个实例进行测试

nacos版本对应java nacos版本查看_用户中心_08


nacos版本对应java nacos版本查看_nacos版本对应java_09


思考?如果将用户中心断开,再次刷新浏览器观察变化

六、为内容中心引入服务发现

修改ShareService

@Slf4j
@Service
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class ShareService {
    private final ShareMapper shareMapper;
    private final RestTemplate restTemplate;
    private final DiscoveryClient discoveryClient;

    public ShareDTO findById(Integer id){
        // 获取分享的详情
        Share share = this.shareMapper.selectByPrimaryKey(id);
        // 发布人id
        Integer userId = share.getUserId();
        // 获取用户中心所有实例信息
        List<ServiceInstance> instances = discoveryClient.getInstances("user-center");
        String targetURL = instances.stream()
                // 数据变换
                .map(instance-> instance.getUri().toString() +  "/users/{id}")
                .findFirst()
                .orElseThrow(()-> new IllegalArgumentException("当前没有实例"));

        log.info("请求的目标地址:{}",targetURL);
        // 怎么调用用户微服务的users/{userId}
        UserDTO userDTO = this.restTemplate.getForObject(
                targetURL,
                UserDTO.class,
                userId
        );
        // 消息的装配
        ShareDTO shareDTO = new ShareDTO();
        BeanUtils.copyProperties(share,shareDTO);
        shareDTO.setWxNickname(userDTO.getWxNickname());
        return shareDTO;
    }
}

测试

nacos版本对应java nacos版本查看_用户中心_10

七、Nacos服务发现的领域模型

nacos版本对应java nacos版本查看_nacos版本对应java_11

  • Namespace:实现隔离,默认public
  • Group:不同服务可以分到一个组,默认DEFAULT_GROUP
  • Service:微服务
  • Cluster:对指定微服务的一个虚拟划分,默认DEFAULT
  • Instance:微服务实例

八、Nacos元数据

官方文档说明

nacos版本对应java nacos版本查看_服务发现_12


元数据的作用

  • 提供描述信息
  • 让微服务调用更加灵活

如何为微服务设置元数据?

  • 控制台方式指定
  • 配置文件指定