zoukankan      html  css  js  c++  java
  • 1.【Spring Cloud Alibaba】服务发现-Nacos

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

    image

    二、服务发现原理

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

    image

    三、什么是Nacos?

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

    image

    四、搭建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添加
    spring:
      cloud:
        nacos:
          discovery:
            #指定nacos server的地址
            server-addr: localhost:8848
      application:
        # 服务名称尽量用-,不用要_,更不要用特殊字符
        name: user-center
    
    启动服务

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

    image

    登录查看注册的服务

    image

    2、将content-center注册到Nacos

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

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

    image

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

    在TestController下添加如下代码

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

    在浏览器下进行测试

    image

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

    image

    image

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

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

    修改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;
        }
    }
    
    测试

    image

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

    image

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

    image

    image

    八、Nacos元数据

    官方文档说明

    image

    元数据的作用
    • 提供描述信息
    • 让微服务调用更加灵活
    如何为微服务设置元数据?
    • 控制台方式指定
    • 配置文件指定

    image

  • 相关阅读:
    jQuery选择器
    jquery处理json笔记
    观察者模式
    shiro自定义realm
    AysncTask更新progressbar
    android自定义控件
    任务的挂起和激活
    main方法添加2个集合存储图形
    矩形类-内部类刷新
    圆类-内部类多线程刷新
  • 原文地址:https://www.cnblogs.com/xjknight/p/12349085.html
Copyright © 2011-2022 走看看