什么是 Nacos(摘自https://nacos.io/zh-cn/docs/quick-start.html)

  Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。

  Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。

  服务(Service)是 Nacos 世界的一等公民。Nacos 支持几乎所有主流类型的“服务”的发现、配置和管理:

Nacos 的关键特性包括:

  • 服务发现和服务健康监测:
  •   Nacos 支持基于 DNS 和基于 RPC 的服务发现。服务提供者使用 原生SDK、OpenAPI、或一个独立的Agent TODO注册 Service 后,服务消费者可以使用DNS TODO 或HTTP&API查找和发现服务。Nacos 提供对服务的实时的健康检查,阻止向不健康的主机或服务实例发送请求。Nacos 支持传输层 (PING 或 TCP)和应用层 (如 HTTP、MySQL、用户自定义)的健康检查。 对于复杂的云环境和网络拓扑环境中(如 VPC、边缘网络等)服务的健康检查,Nacos 提供了 agent 上报模式和服务端主动检测2种健康检查模式。Nacos 还提供了统一的健康检查仪表盘,帮助您根据健康状态管理服务的可用性及流量。
  • 动态配置服务:
  •   动态配置服务可以让您以中心化、外部化和动态化的方式管理所有环境的应用配置和服务配置。动态配置消除了配置变更时重新部署应用和服务的需要,让配置管理变得更加高效和敏捷。配置中心化管理让实现无状态服务变得更简单,让服务按需弹性扩展变得更容易。Nacos 提供了一个简洁易用的UI (控制台样例 Demo) 帮助您管理所有的服务和应用的配置。Nacos 还提供包括配置版本跟踪、金丝雀发布、一键回滚配置以及客户端配置更新状态跟踪在内的一系列开箱即用的配置管理特性,帮助您更安全地在生产环境中管理配置变更和降低配置变更带来的风险。
  • 动态 DNS 服务:
  •   动态 DNS 服务支持权重路由,让您更容易地实现中间层负载均衡、更灵活的路由策略、流量控制以及数据中心内网的简单DNS解析服务。动态DNS服务还能让您更容易地实现以 DNS 协议为基础的服务发现,以帮助您消除耦合到厂商私有服务发现 API 上的风险。Nacos 提供了一些简单的 DNS APIs TODO 帮助您管理服务的关联域名和可用的 IP:PORT 列表.
  • 服务及其元数据管理:

    Nacos 能让您从微服务平台建设的视角管理数据中心的所有服务及元数据,包括管理服务的描述、生命周期、服务的静态依赖分析、服务的健康状态、服务的流量管理、路由及安全策略、服务的 SLA 以及最首要的 metrics 统计数据。

Nacos 快速开始:

1.预备环境准备

  Nacos 依赖 Java 环境来运行。如果您是从代码开始构建并运行Nacos,还需要为此配置 Maven环境,请确保是在以下版本环境中安装使用:

  1. 64 bit OS,支持 Linux/Unix/Mac/Windows,推荐选用 Linux/Unix/Mac。
  2. 64 bit JDK 1.8+;下载 & 配置。
  3. Maven 3.2.x+;下载 & 配置。

  也可以通过 https://github.com/alibaba/nacos/releases 下载最新稳定版本 下载 nacos-server-$version.zip 包。从 Github 上下载源码方式:

git clone https://github.com/alibaba/nacos.git
cd nacos/
mvn -Prelease-nacos -DskipTests clean install -U

  由于我编译的时候跑Test报错,我这里选择跳过Test.

  编译完进入 nacos\distribution\target\nacos-server-1.1.3\nacos\bin 目录,我这边windows 双击 startup.cmd 启动服务:

  等服务启动完毕根据其控制台打印的地址去访问http://192.168.216.1:8848/nacos/index.html,登录进去(默认账号密码都是  nacos),会看到以下界面:

  可以很清晰的看到nacos为我们提供了基于配置管理,服务管理,集群管理三大主功能下的管理。作为服务注册中心的话,如果小伙伴们熟悉Zookeeper的话,其实原理是大同小异的,我们这里主要基于配置中心去操作一下,我们去添加一条配置:

  其中ID与Group 官方给出的定义如下:

  配置集 ID:Nacos 中的某个配置集的 ID。配置集 ID 是组织划分配置的维度之一。Data ID 通常用于组织划分系统的配置集。一个系统或者应用可以包含多个配置集,每个配置集都可以被一个有意义的名称标识。Data ID 通常采用类 Java 包(如 com.taobao.tc.refund.log.level)的命名规则保证全局唯一性。此命名规则非强制。

  配置分组:Nacos 中的一组配置集,是组织配置的维度之一。通过一个有意义的字符串(如 Buy 或 Trade )对配置集进行分组,从而区分 Data ID 相同的配置集。当您在 Nacos 上创建一个配置时,如果未填写配置分组的名称,则配置分组的名称默认采用 DEFAULT_GROUP 。配置分组的常见场景:不同的应用或组件使用了相同的配置类型,如 database_url 配置和 MQ_topic 配置。

Java案例实践:

1.首先基于Nacos 的原生SDK,导入依赖:

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

2.主类操作如下:

public static void main(String[] args) {
//连接到目标服务的地址
//指定dataid、 groupid
String serverAddr="localhost:8848";
String dataId="example";
String groupId="DEFAULT_GROUP";
Properties properties=new Properties();
properties.put("serverAddr",serverAddr);
try {
//ConfigService-> NacosConfigService
ConfigService configService=NacosFactory.createConfigService(properties);
String content=configService.getConfig(dataId,groupId,);
System.out.println(content);
       //监听
configService.addListener(dataId, groupId, new Listener() {
@Override
public Executor getExecutor() {
return null;
}
@Override
public void receiveConfigInfo(String configInfo) {
System.out.println("configInfo:"+configInfo);
}
});
} catch (NacosException e) {
e.printStackTrace();
} }

3.在控制台新增如下配置:

4.运行即可获得对应的配置结果。

基于SpringBoot 集成 Nacos配置中心:

1.导入依赖:

<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>nacos-config-spring-boot-starter</artifactId>
<version>0.2.</version>
</dependency>

2.编写一个Controller:

@NacosPropertySource(type = ConfigType.YAML,dataId = "example",groupId = "DEFAULT_GROUP",autoRefreshed = true)
@RestController
public class NacosConfigController { /**
* 当前的info这个属性,回去nacos-server找到对应的info这个属性
* 高可用性
* hello Nacos表示本地属性(降级属性)
   * autoRefreshed :是否自动刷新配置变更
*/
@NacosValue(value = "${name:hello Nacos}",autoRefreshed = true)
private String name; @GetMapping("/get")
public String get(){
return name;
}
}

3.新增配置文件 application.properties

spring.application.name=springboot-nacos
# nacos配置地址
nacos.config.server-addr=127.0.0.1:
server.port=

  启动项目访问接口就可以获取结果。

基于SpringBoot 集成 Nacos注册中心:

1.新增依赖:

<dependency>
  <groupId>com.alibaba.boot</groupId>
  <artifactId>nacos-discovery-spring-boot-starter</artifactId>
  <version>0.2.</version>
</dependency>

2.新增配置类:

@Configuration
public class NacosRegisterConfiguration { @Value("${server.port}")
private int serverPort; @Value("${spring.application.name}")
private String applicationName; @NacosInjected
private NamingService namingService; @PostConstruct
public void registerInstance() throws NacosException {
namingService.registerInstance(applicationName, "127.0.0.1", serverPort, "DEFAULT");
}
}

3.新增配置:

# nacos注册地址
nacos.discovery.server-addr=127.0.0.1:

4.启动后可以在控制台看到:

  官方文档有很详细的解释,包括对于 Dubbo,springCloud的集成等。接下去我们深入来学习一下Nacos的源码,来体会设计思路。

Nacos1.1.3小试牛刀的更多相关文章

  1. Xamarin+Prism小试牛刀:定制跨平台Outlook邮箱应用(后续)

    在[Xamarin+Prism小试牛刀:定制跨平台Outlook邮箱应用]里面提到了Microsoft 身份认证,其实这也是一大块需要注意的地方,特作为后续补充这些知识点.上章是使用了Microsof ...

  2. 小试牛刀C#作为脚本语言执行解密

    背景 我们知道Unity3d是通过C#脚本语言的形式来实现游戏的逻辑代码编写,同样SCOTT服务器也设置了通过C#脚本来实现游戏逻辑,但是本文并不是想真正分析解密他们的运行机制,只是想通过自己的一个需 ...

  3. 20145225唐振远 《Java程序设计》第1周学习总结——小试牛刀

    20145225唐振远<Java程序设计>第1周学习总结——小试牛刀 教材学习内容总结 1.java语言概述:一门高级编程语言. 2.java语言的三种技术构架:java SE.java ...

  4. (linux shell)第一章--小试牛刀(上)

    来源:(linux shell)第一章--小试牛刀(上) 从今天開始,我们一起来学习<linux shell脚本攻略>这本书. 1.1简单介绍 shell脚本一般是一个以#!起始的文本文件 ...

  5. 正则表达式小试牛刀--匹配我的csdn博文标题

    正则表达式小试牛刀--匹配我的博文标题 作者:vpoet 邮箱:vpoet_sir@163.com 正则匹配,我以我的博客页面的博客标题为例:http://blog.csdn.net/u0130187 ...

  6. 微信小程序基于最新版1.0开发者工具分享-小试牛刀(视频)+发布流程

    第一章:小程序初级入门教程 小试牛刀[含视频] 视频地址:https://v.qq.com/x/page/i0554akzobq.html 这一章节中,我们尝试着写一个最简单的例子,包含 2 个静态页 ...

  7. [sqoop] sqoop 小试牛刀

    sqoop 1.4.6  小试牛刀 sqoop import 参数 1. mysql导入 到hdfs中 ./sqoop import --connect jdbc:mysql://mysql:3306 ...

  8. Jenkins持续集成之小试牛刀

    关于Jenkins的安装,大家可以参考我的这两篇文章: Ubuntu16.04环境安装jenkins docker安装jenkins及其相关问题解决 之前没有好好研究过Jenkins,只是简单学会怎么 ...

  9. MyBatis原理简介和小试牛刀

    在我看来mybatis的原理与hibernate在某些方面是一致的,先回顾一下Hibernate原理(原理主要上是要掌握并理解下列六个对象: Hibernate中重要的六个对象: Configurat ...

随机推荐

  1. 2017 BJ ICPC 石子合并变种 向量基本功及分类考察

    E 模拟 #include <bits/stdc++.h> #define PI acos(-1.0) #define mem(a,b) memset((a),b,sizeof(a)) # ...

  2. GUI学习之十九——QFontComboBox学习总结

    我们上一章学习了QComboBox的用法,这一章我们来看一下它的一个比较常用的子类:QFontComboBox(). 一.描述: QFontComboBox()是QComboBox()的一个子类,但是 ...

  3. mybatis查询出字段为null,但是sql查出来有值

    mybati 查出字段值为null, 然而相同的sql查出字段确实有值 原因: 在接受对象中使用了继承 :也就是说继承类与父类都定义了这个属性 ,字段重复,删除子类属性即可

  4. 【串线篇】spring boot启动配置原理

    几个重要的事件回调机制 配置在META-INF/spring.factories ApplicationContextInitializer SpringApplicationRunListener ...

  5. window.open()的实际应用

    Window open() 方法 定义和用法 open() 方法用于打开一个新的浏览器窗口或查找一个已命名的窗口. 语法 window.open(URL,name,specs,replace) 参数 ...

  6. Web防止button按钮点击多次

    BtnPass.Attributes.Add("onclick", "javascript:if(document.getElementById('IsSubmited' ...

  7. SQL 查询表字段长度, 名称, 类型, 存储过程创建和修改时间

    获取存储过程的修改时间和创建时间查询建立时间 --表 select * from sysobjects where id=object_id(N'表名') and xtype='U' --表的结构 s ...

  8. Python用MyQR生成自定义个性二维码

    MyQR是一个能够生成自定义二维码的python第三方库,根据需要能够生成普通二维码.带背景图片的艺术二维码.动态二维码. 1.MyQR安装 安装非常简单,直接用pip install MyQR,需要 ...

  9. PHP获取数组最大值下标的方法

    <?php $hots = array('8213'=> 0,'8212'=> 100,'8172'=> 10008); $key = array_search(max($ho ...

  10. 解决异常信息 Caused by: java.lang.IllegalArgumentException: invalid comparison: java.lang.String and java.util.Date

    原来的xml文件 <if test="null != endDate and '' != endDate"> AND rr.REG_DATE <= #{endDa ...