深入浅出高性能服务发现、配置框架Nacos系列 1: HelloWorld

Nacos是什么?

引用官方的介绍,他主要提供以下几个功能点:

  • 动态配置服务
  • 服务发现及管理
  • 动态DNS服务

动态配置服务

就是通过一个系统,管理系统中的配置项,在配置项需要更新的时候,可以通过管理系统去操作更新,更新完了之后,会主动推送到订阅了这个配置的客户端

具体的使用场景,例如,在系统中,会有数据库的链接串,账号密码等配置信息,常规的做法是写在配置文件里面,如果需要修改更新,需要重新打包编译,如果你是分布式集群,那成本太大了,通常我们都会将它抽取出来,存放到db,或者一个管理系统,Nacos,就是这个管理系统,Nacos还提供主动通知的能力,DB是没有的,在自己的系统代码里面,可以监听某个配置,如果在管理系统上修改了配置项,客户端的监听函数,会立刻执行,在里面,你可以拿到最新的配置,执行自己的业务逻辑

服务发现及管理

这个主要是针对分布式的微服务集群系统,某A集群提供服务出去,其他应用集群,需要消费到A集群的服务,需要一个系统去管理A集群的ip列表,其他应用集群,去这个系统才能获取到A集群的ip列表,进行调用,同时该系统需要能够自动将A集群中无法工作的ip进行去除掉,这样才能保证调用方调用成功,Nacos就是提供这种能力的一个系统

动态DNS服务

这个理解起来也简单,我们平常在代码里面 ,访问一个http的api,通常是带一个域名的,请求的时候,一般会先去DNS域名服务器上面寻找该域名对应的ip,再发起http请求,Nacos可以充当这个DNS域名服务器的角色的,优点是什么呢?Nacos提供了比DNS域名服务器更方便的管理能力,新增一个域名,只需要在Nacos的控制台上面配置一下,同时它还提供了包括权重,健康检查,属性,路由等DNS服务器不具备的能力,比DNS的产品功能,稳定性,灵活性,超出太多了

Nacos除了能够解决上面提到的一些场景,大家可以自由发挥,反正它的能力在那里,至于怎么用,就靠你们聪明的脑袋了。下面,我们尝试从Nacos的官方源码拉一份下来,进行一个服务的发布,订阅的简单流程,让大家更有体感去感受下Nacos的功能

下载源码

Nacos的代码是托管在github上,点击进入关注,开始之前先start关注一下,加上watch,后续的邮件列表也会通知到你,可以关注到的最新实时消息,及各大牛之间的精彩讨论。

我们首先直接下载Nacos的源码到本地,下载地址如下图红框:

然后,要从github上把代码拉下来,命令如下:

git clone [email protected]:alibaba/nacos.git

编译启动

下载完后,在本地会有一个nacos的文件夹,进去后,执行编译打包的命令:

mvn -Prelease-nacos clean install -U -Dmaven.test.skip=true

执行完之后,在nacos/distribution/target文件夹里面,会生成如下几个工程文件:

忽略archive-tmp,将nacos-server-0.2.0.zip或者nacos-server-0.2.0.tar.gz直接copy到你的服务器上面,
然后解压开来,得到一个叫nacos的文件夹,里面的结构如下:

进入bin文件,里面有启动,关闭nacos server的脚本,我们执行一下启动脚本,注意,nacos server的启动,有2种方式,一种是集群模式,一种是单机模式,由于集群模式还需要一些其他的配置才能运行,今天我们就跑单机模式,需要加一个特殊参数,命令如下:

sh startup.sh -m standalone

命令执行完之后,出现提示:

nacos is starting,you can check the /home/caogu.wyp/test/nacos/logs/start.log

我们可以去/nacos/logs/start.log看下启动日志,是否有报错,如果有报错,自己分析一下,找不到原因,联系Nacos管理员 @超哥,他会很热心的帮你解决问题滴。
启动成功的日志如下:

同时, 我们也可以自己check下server的端口是否监听成功,执行

netstat -ano|grep 8080 

现在服务端启动好了。

发布一个服务

我们现在来用Java客户端,发布和订阅一个服务,客户端,我们有2种方式运行,一个是在自己工程里面,通过maven坐标下载进来,另外一种,直接从下载的Nacos源码里面,坐标如下:

<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
<version>0.1.0</version>

由于我们有代码,我就直接在工程里面进行操作了,工程结构如下,直接在test模块里面,新建一个helloworld的包:

Pub类里面,是发布一条数据,代码如下:

public class Pub {

    public static void main(String[] args) throws NacosException, InterruptedException {
        //发布的服务名
        String serviceName = "helloworld.services";
        //构造一个nacos实例,入参是nacos server的ip和服务端口
        NamingService naming = NacosFactory.createNamingService("100.81.0.34:8080");
        //发布一个服务,该服务对外提供的ip为127.0.0.1,端口为8888
        naming.registerInstance(serviceName, "127.0.0.1", 8888);
        Thread.sleep(Integer.MAX_VALUE);
    }
}

启动之后,服务已经发布上去了

订阅一个服务

下面是Sub的代码:

public class Sub {

    public static void main(String[] args) throws NacosException, InterruptedException {
        //订阅的服务名
        String serviceName = "helloworld.services";
        //创建一个nacos实例
        NamingService naming = NacosFactory.createNamingService("100.81.0.34:8080");
        //订阅一个服务
        naming.subscribe(serviceName, event -> {
            if (event instanceof NamingEvent) {

                System.out.println("订阅到数据");
                System.out.println(((NamingEvent) event).getInstances());
            }
        });
        System.out.println("订阅完成,准备等数来");
        Thread.sleep(Integer.MAX_VALUE);
    }
}

我们尝试启动,会订阅到刚才发布的数据:

总结

上面流程,就是一个helloworld的服务发布和订阅,够简单吧,在实际的生产环境中,一个服务下面往往挂有好几个ip提供服务,在订阅端,拿到服务下面的所有地址列表后,通过负载均衡策略,例如随机策略,选择到一个ip进行调用,这样就完成了一次远程调用。

转载请联系:微信号(zjjxg2018)

原文地址:http://blog.51cto.com/13995002/2287541

时间: 2024-10-08 04:37:32

深入浅出高性能服务发现、配置框架Nacos系列 1: HelloWorld的相关文章

深入浅出高性能服务发现、配置框架Nacos系列 3: 服务发现:Nacos客户端初始化流程

上一章节,我们从全局了解了一下Nacos项目的模块架构,做到了心中有数,现在,我们去逐步去挖掘里面的代码细节,很多人在学习开源的时候,无从下手,代码那么多,从哪个地方开始看呢?我们可以从一个接口开始入手,这个接口是你使用过的,知道它大概做什么事,有体感的,大家还记得第一章时,我们写的HelloWorld吗,对,就从里面的接口开始剥洋葱. 这个是Nacos的github代码地址,开始之前先start关注一下,加上watch,后续Nacos的邮件列表也会通知到你,可以关注到Nacos的最新实时消息,

深入浅出高性能服务发现、配置框架Nacos系列 2: Nacos项目结构介绍

今天,我们分析一下Nacos工程的包模块结构,都是负责什么功能的,从全局看一下整个工程,从整体到细节,还没下载源码的同学,赶紧动起来!https://github.com/alibaba/nacos,这个是github代码地址,开始之前先start关注一下,加上watch,后续的邮件列表也会通知到你,可以关注到Nacos的最新实时消息,及各大牛之间的精彩讨论. 截止本文发出,代码最新是master分支上0.2.0版本的,新开源版迭代会比较频繁,很可能某个类,或者模块依赖关系,下个版本就不一样了,

服务发现原理和nacos介绍

1.服务发现组件有如下列表 id service_name ip port status last_heartbeat_time 1 user-center 127.0.0.1 8080 up timestamp1 2 content-center 127.0.0.1 8080 up timestamp1 3 user-center 192.168.0.1 8080 up timestamp1 2.微服务定时任务,定时从服务发现组件进行同步服务注册信息 3.所有服务都会定时向服务发现组件发送心跳

SpringBoot使用Nacos服务发现

本文介绍SpringBoot应用使用Nacos服务发现. 上一篇文章介绍了SpringBoot使用Nacos做配置中心,本文介绍SpringBoot使用Nacos做服务发现. 1.Eureka闭源 相信到现在,Eureka 2.0 闭源已经不是什么新鲜事了.在2017-2018年,几乎在国内掀起了一阵SpringCloud的热潮,几乎很大一部分人群随着对SpringBoot的关注,都开始关注起来了SpringCloud.而由于Eureka注册中心的易整合等优点,更是大多数使用SpringClou

服务发现:Zookeeper vs etcd vs Consul

摘自:http://dockone.io/article/667 [编者的话]本文对比了Zookeeper.etcd和Consul三种服务发现工具,探讨了最佳的服务发现解决方案,仅供参考. 如果使用预定义的端口,服务越多,发生冲突的可能性越大,毕竟,不可能有两个服务监听同一个端口.管理一个拥挤的比方说被几百个服务所使用的所有端口的列表,本身就是一个挑战,添加到该列表后,这些服务需要的数据库和数量会日益增多.因此我们应该部署无需指定端口的服务,并且让Docker为我们分配一个随机的端口.唯一的问题

服务发现 - consul 的介绍、部署和使用(转)

什么是服务发现 相关源码: spring cloud demo 微服务的框架体系中,服务发现是不能不提的一个模块.我相信了解或者熟悉微服务的童鞋应该都知道它的重要性.这里我只是简单的提一下,毕竟这不是我们的重点.我们看下面的一幅图片: 图中,客户端的一个接口,需要调用服务A-N.客户端必须要知道所有服务的网络位置的,以往的做法是配置是配置文件中,或者有些配置在数据库中.这里就带出几个问题: 需要配置N个服务的网络位置,加大配置的复杂性 服务的网络位置变化,都需要改变每个调用者的配置 集群的情况下

Nacos系列:Nacos的三种部署模式

三种部署模式 Nacos支持三种部署模式 1.单机模式:可用于测试和单机使用,生产环境切忌使用单机模式(满足不了高可用) 2.集群模式:可用于生产环境,确保高可用 3.多集群模式:可用于多数据中心场景 单机模式 启动 Nacos Server Linux:sh startup.sh -m standalone Windows:cmd startup.cmd -m standalone 或 双击 startup.cmd 启动 关闭 Nacos Server Linux:sh shutdown.sh

SpringCloud系列四:Eureka 服务发现框架(定义 Eureka 服务端、Eureka 服务信息、Eureka 发现管理、Eureka 安全配置、Eureka-HA(高可用) 机制、Eureka 服务打包部署)

1.概念:Eureka 服务发现框架 2.具体内容 对于服务发现框架可以简单的理解为服务的注册以及使用操作步骤,例如:在 ZooKeeper 组件,这个组件里面已经明确的描述了一个服务的注册以及发现操作流程,在整个 Rest 架构里面,会存在有大量的微服务的信息. 在 SpringCloud 之中使用了大量的 Netflix 的开源项目,而其中 Eureka 就属于 Netflix 提供的发现服务组件,所有的微服务在使用之中全部向 Eureka 之中进行注册,而后客户端直接利用 Eureka 进

物联网架构成长之路(51)-Nacos微服务配置中心、服务注册服务发现

0.前言 之前练习微服务是用Eureka,最近发现BladeX是用的Nacos,发现Nacos还比较简单实用.所以联系一下这个,为物联网V2版本积累经验. 1. 下载.安装.启动 下载Nacos 1 https://github.com/alibaba/nacos/releases 2 https://nacos.io/zh-cn/docs/quick-start.html 解压启动 访问http://127.0.0.1:8848/nacos/index.html 默认帐号密码 nacos/na