前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >java架构之路-(微服务专题)nacos集群精讲实战

java架构之路-(微服务专题)nacos集群精讲实战

作者头像
小菜的不能再菜
发布于 2020-02-25 06:48:27
发布于 2020-02-25 06:48:27
50000
代码可运行
举报
文章被收录于专栏:java_pythonjava_python
运行总次数:0
代码可运行

上次回顾:

  上次博客,我们主要说了微服务的发展历程和nacos集群单机的搭建,单机需要-m standalone启动,集群建议使用nginx做一下反向代理,自行保证mysql和ngxin的高可用。

本次定位:

  一、nacos的内部概念

  二、nacos的基本使用

  三、为下次ribbon组件做准备

nacos的内部概念

  上次我们搭建好了nacos集群,这次我们就在那个集群基础上来继续说,上次我们只说到了服务如何注册到我们的nacos,但是调用还没说,这次我们来说说各种调用吧(调用的负载均衡算法在ribbon去说)。

  ①.调用,我们先来一个最简单的调用,用户系统去调用订单系统,查询订单。

  建立两个springboot项目,加入注册中心配置。配置上次博客说过了,这里就不再赘述了,在订单服务内写一个方法。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@RestController
public class OrderController {

    @GetMapping("/getOrderData")
    public String getOrderData(){
        return "获得订单服务的数据";
    }


    @GetMapping("/getOrderData-B")
    public String getOrderDataB(){
        return "获得订单服务的数据B";
    }
}

  我就简单写一个了,能获取到下面的字符串也说明调用时可以的。

  在用户服务中,编写config配置。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Configuration
public class ClientConfig {

    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

  开始调用啦

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@RestController
public class UserController {

    @Autowired
    private RestTemplate restTemplate;

    @Autowired
    private DiscoveryClient discoveryClient;

    @GetMapping("/getOrder")
    public String getOrderData(){
        List<ServiceInstance> orderInfo = discoveryClient.getInstances("nacos-order");
        if(null == orderInfo || orderInfo.isEmpty()) {
            return "用户微服务没有对应的实例可用";
        }
      
        String targetUri = orderInfo.get(0).getUri().toString();

        String forObject = restTemplate.getForObject(targetUri + "/getOrderData", String.class);
        System.out.println("forObject = " + forObject);

        return forObject;
    }
}

  就这样,最简单的调用也就可以实现了。(没有任何负载均衡算法,我直接get(0)了)。

  ②.namespace

  这里我们来看看什么是namespace,如果我们开发,测试环境共用一个nacos,必定我们的接口地址也是不同,而且你在开发过程中,也是不建议随意配置测试环境的,这时我们就应该用namespace来隔离我们的空间。

  打开我们的nacos的页面,点击命名空间,新建,输入信息即可。

  我们再来看一下代码实现,如何实现隔离的。

  首先在配置文件中添加namespace配置。namespace:命名空间ID

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
spring:
  application:
    name: nacos-order
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.138.119:8848
        namespace: 0610f97e-c25d-4f49-bfb8-b340e3584b82
server:
  port: 8888

  订单服务的配置为开发环境,用户服务配置为测试环境的,我们来运行一下代码,理论上应该调用不通的,我们来看一下结果。

  现实如此无法调用,也就做到了我们的隔离环境。如果不写namespace,默认是public命名空间。

  ③.group

  group分组,也是用来隔离的,打个比方啊,加入我们的用户服务,订单服务,仓储服务和物流服务四个服务,订单服务中有一个接口叫getData,仓储服务中也有一个接口叫getData,我们的用户服务只想调用到我们的订单服务的getData,不想调用到仓储服务的getData,这时我们可以用group分组来隔离。

  我们来看一下配置吧。只需要加入group:分组名称即可,nacos客户端不需要任何设置,这里需要注意的是你的父类项目依赖,2.1.0.RELEASE版本是没有group的,也无法设置group(反正我没找到什么好办法)。需要改配置为2.1.1.RELEASE

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!--spring cloud alibaba依赖-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-alibaba-dependencies</artifactId>
    <version>2.1.1.RELEASE</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
spring:
  application:
    name: nacos-order
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.138.119:8848
        namespace: 0610f97e-c25d-4f49-bfb8-b340e3584b82
        group: pay
server:
  port: 8888

  ④.还有一个概念是service服务集群,什么意思呢?先上个图。

  就是什么呢,我们现在有两组集群,一个是北京的订单服务集群,一个是北京的用户服务集群,还有一个上海的订单服务集群,我们希望北京的用户集群,优先去调用北京的订单系统,上海的优先调用上海的集群服务。并不希望我们跨地区远程调用(如果组内实在没有服务了,也可以调用,但是优先考虑同一集群的)。配置文件如下所示

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
spring:
  application:
    name: nacos-order
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.138.119:8848
        namespace: 0610f97e-c25d-4f49-bfb8-b340e3584b82
        group: pay
        cluster-name: BJ-cluster
server:
  port: 8888

  ⑤.再就是版本了,也是我知道的最后一个了,比如我们要进行灰度发布了,我们有100台服务集群,但是这次新功能很重要,不能一次性全部更新,我们选择灰度发布,我们选出5台服务作为新版发布的,我们定义为V2,内部接口时不兼容的,所以我们只能要5台新用户服务去调用5台订单服务,原有的95台用户服务还是继续调用那95台订单服务,我们定义为V1。

  我们来看一下代码配置

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
spring:
  application:
    name: nacos-order
  cloud:
    nacos:

      discovery:
        server-addr: 192.168.138.119:8848
        namespace: 0610f97e-c25d-4f49-bfb8-b340e3584b82
        group: namespace-one
        cluster-name: BJ-cluster
        metadata:
          version: v1
server:
  port: 8888

  剧透一下,nacos是用map来进行隔离的,大致结构式Map<namespace,Map<group::serviceName,Service>>,也是我们为什么cluster-name和版本为什么做不到完全隔离,后面的源码博客会说详细说这个问题的。

总结:

  这次我们主要说了nacos的使用,原理?原理还没说,等到我们的源码带着说一下吧,不难,就是一个心跳的问题。nacos要知道namespace、group、cluster-name、版本主要是用来做什么的,什么时候我们该选择什么。下次我们来说一下Ribbon,也就是我们服务直接调用的一个插件。

最进弄了一个公众号,小菜技术,欢迎大家的加入

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-02-19 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
微服务注册中心Nacos入门
服务治理的核心由三部分组成:服务提供者、服务消费者、注册中心。在分布式系统架构中,每个微服务在启动时,将自己的信息存储在注册中心,叫做服务注册。服务消费者从注册中心获取服务提供者的网络信息,通过该信息调用服务,叫做服务发现。
Se7en258
2021/05/18
7870
微服务注册中心Nacos入门
Nacos搭建流程 顶
要使用nacos,我们首先得下载它的服务端,下载地址https://github.com/alibaba/nacos/releases
算法之名
2019/12/16
1.2K0
Nacos搭建流程
                                                                            顶
java架构之路-(微服务专题)feign的基本使用和nacos的配置中心
  上次我们说了ribbon的基本使用,包括里面的内部算法,算法的细粒度配置,还有我们自己如何实现我们自己的算法,主要还是一些基本使用的知识,还不会使用ribbon的小伙伴可以回去看一下上一篇博客。
小菜的不能再菜
2020/02/25
9150
java架构之路-(微服务专题)feign的基本使用和nacos的配置中心
Ribbon和 Nacos服务注册中心
上一节我们学习了 SpringCloud 的核心组件 Eureka ,但是它逐渐被 Nacos 替代
程序员Leo
2023/08/07
4450
Ribbon和 Nacos服务注册中心
【微服务】Nacos集群搭建以及加载文件配置
👀专栏介绍 【微服务】 目前主要更新微服务,一起学习一起进步。 👀本期介绍 本期主要介绍Nacos集群搭建以及加载文件配置 文章目录 目录 服务集群 需求 搭建 测试 加载配置文件顺序 nacos配置DataId介绍 配置yml文件中的DataId 配置console中的DataId 测试 多环境配置 服务集群 需求 服务提供者搭建集群 服务调用者,依次显示集群中各服务的信息 搭建 1)修改服务提供方的controller,打印服务端端口号 package com.czxy.co
陶然同学
2023/02/27
5220
【微服务】Nacos集群搭建以及加载文件配置
SpringCloud微服务之初识微服务01
随着互联网行业的发展,对服务的要求也越来越高,服务架构也从单体架构逐渐演变为现在流行的微服务架构。这些架构之间有怎样的差别呢?
Maynor
2021/12/06
3370
SpringCloud微服务之初识微服务01
微服务新秀之Nacos,看了就会,我说的!
大家好,我是小菜,一个渴望在互联网行业做到蔡不菜的小菜。可柔可刚,点赞则柔,白嫖则刚!「死鬼~看完记得给我来个三连哦!」
蔡不菜丶
2020/11/11
6130
微服务新秀之Nacos,看了就会,我说的!
SpringCloud之nacos
国内公司一般都推崇阿里巴巴的技术,比如注册中心,SpringCloudAlibaba也推出了一个名为Nacos的注册中心。
roydonGuo
2023/03/08
8990
SpringCloud之nacos
微服务灵魂摆渡者Nacos
Nacos是阿里巴巴开源的服务注册中心以及配置中心,致力于给开发者提供一款便捷、简单上手的开源框架。
爱撒谎的男孩
2022/12/30
4130
(5)使用Nacos注册中心
国内公司一般都推崇阿里巴巴的技术,比如注册中心,SpringCloudAlibaba也推出了一个名为Nacos的注册中心。
用户7630333
2023/12/07
2320
(5)使用Nacos注册中心
微服务客户端负载均衡组件Ribbon
常见的服务端负载均衡有Nginx,客户端将请求发送给Nginx,Nginx根据负载均衡算法选择一个服务器调用,具体调用哪个服务器由Nginx说了算,客户端是不知道服务器的真实IP的。
Se7en258
2021/05/18
1.1K0
微服务客户端负载均衡组件Ribbon
Nacos注册中心 (介绍与配置)
在Nacos的GitHub页面,提供有下载链接,可以下载编译好的Nacos服务端或者源代码:
不吃紫菜
2023/02/13
7440
Nacos注册中心 (介绍与配置)
SpringCloud真不难—Eureka注册中心、Ribbon负载均衡、Nacos注册中心
随着互联网行业的发展,对服务的要求也越来越高,服务架构也从单体架构逐渐演变为现在流行的微服务架构。这些架构之间有怎样的差别呢?
陶然同学
2023/02/27
5360
SpringCloud真不难—Eureka注册中心、Ribbon负载均衡、Nacos注册中心
nacos
1. 进入nacos文件bin目录中 cmd启动nacos startup.cmd -m standalone #standalone代表单例模式 2. 引入依赖 <!--nacos的管理依赖 springCloud alibaba--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId>
用户10521079
2023/05/04
1.1K0
nacos
Spring Cloud Alibaba - 03 注册中心Nacos 应用篇(上)
下载地址 :https://github.com/alibaba/Nacos/releases
小小工匠
2022/02/03
3390
Spring Cloud Alibaba - 03 注册中心Nacos 应用篇(上)
55 张图吃透 Nacos,微服务的灵魂摆渡者强大在哪
Nacos是阿里巴巴开源的服务注册中心以及配置中心,致力于给开发者提供一款便捷、简单上手的开源框架。
程序员小富
2021/09/24
2.7K3
55 张图吃透 Nacos,微服务的灵魂摆渡者强大在哪
java架构之路-(微服务专题)ribbon的基本使用和内部算法的自我实现
  上次我们主要说了,我们的注册中心nacos的使用,如我们的命名空间、分组、集群、版本等是如何使用的,如果是这样呢?我们现在有三个用户服务和三个订单服务,我们应该如何分发这些请求呢?都请求到一个服务?轮询?权重?这次我们就来看一下我们的如何解决这些问题的。
小菜的不能再菜
2020/02/25
6200
java架构之路-(微服务专题)ribbon的基本使用和内部算法的自我实现
Nacos 的基本使用
官网的介绍: https://nacos.io/zh-cn/docs/what-is-nacos.html
小小杰啊
2022/12/21
3740
Nacos 的基本使用
Nacos作为服务配置中心实战
  Nacos同springcloud-config一样,在项目初始化时,要保证先从配置中心进行配置拉取, 拉取配置之后,才能保证项目的正常启动。
别团等shy哥发育
2023/02/25
8370
Nacos作为服务配置中心实战
SpringCould快速入门
添加RestTemplate作为bena,调用RestTemplate.getForObject()方法,参数是url和类字节码
一只
2023/08/10
2490
相关推荐
微服务注册中心Nacos入门
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文