首页新闻博问专区闪存云上钜惠我的博客我的园子账号设置退出登录注册登录削微寒的程序员之路 谦逊、专注,才能成长。 博客园首页订阅管理随笔 - 411 文章 - 0 评论 - 1272 搞微服务用阿里开源的 Nacos 真香啊! 本文适合有 Java 基础知识的人群本文作者:HelloGitHub-秦人HelloGitHub 推出的《讲解开源项目》系列,今天给大家带来一款开源 Java 版可以实现动态服务发现,配置和服务管理平台——Nacos,它是阿里巴巴团队开源符合国人的一切使用习惯,并且中文文档丰富,开源社区也特别活跃。项目源码地址:https://github.com/alibaba/nacos一、项目介绍在选择使用一个工具之前,我们先大概了解一下它的同类型产品,这样更能看出它的价值。三大注册中心名称配置中心注册中心依赖访问协议版本迭代集成支持上手程度Eureka不支持支持依赖ZooKeeperHTTP无版本升级SpringCloud集成容易,英文界面,不符合国人习惯Consul支持支持不依赖其他组件HTTP/DNS版本迭代中SpringCloud、K8S复杂,英文界面,不符合国人习惯Nacos支持支持不依赖其他组件HTTP/动态DNS/UDP版本迭代中Dubbo、SpringCloud、K8S极易,中文文档和社区,符合国人习惯提供了一组简单易用的特性集,帮助开发者快速实现动态服务发现、服务配置、服务元数据及流量管理。
主要特性:服务发现:支持基于 DNS 和基于 RPC 的服务发现。服务提供者使用 原生SDK、OpenAPI、或一个独立的 Agent TODO 注册 Service 后,服务消费者可以使用 DNS TODO 或 HTTP&API 查找和发现服务。服务健康监测:提供对服务的实时的健康检查,阻止向不健康的主机或服务实例发送请求。动态配置服务:动态配置服务可以让您以中心化、外部化和动态化的方式管理所有环境的应用配置和服务配置。动态 DNS 服务:动态 DNS 服务支持权重路由,使用者更容易地实现中间层负载均衡、更灵活的路由策略、流量控制以及数据中心内网的简单DNS解析服务。服务及其元数据管理:Nacos 能让使用者从微服务平台建设的视角管理数据中心的所有服务及元数据,包括管理服务的描述、生命周期、服务的静态依赖分析、服务的健康状态、服务的流量管理、路由及安全策略、服务的 SLA 以及最首要的 metrics 统计数据。Nacos 生态图二、SpringBoot 实战Nacos 主要的功能有配置中心和注册中心。配置中心:通过在 Nacos 上配置用户名,在不重启微服务的情况下实现动态获取配置信息功能。注册中心:创建两个微服务:服务提供者和服务消费者,实现微服务间调用。消费者要调用提供者的接口,只需要声明提供者的微服务名称和接口的请求地址,Nacos 就可准确的找到到对应的接口。2.1 运行 Nacos下载地址:https://github.com/alibaba/nacos/releasesunzip nacos-server-$version.zip #解压
cd nacos/bin
startup.cmd -m standalone #单机模式
访问首页Nacos 的访问地址:http://localhost:8848/nacos/
默认账号密码:nacos nacos
页面截图如下:
2.2 配置中心创建微服务项目创建 SpringBoot 项目主要有三种方式:通过网站创建,IntelliJ IDEA 的 Spring Initializr 工具创建,Maven 创建项目形式创建。项目的pom 文件内容如下:
org.springframework.boot
spring-boot-starter-web
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--nacos-config的Spring cloud依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>0.9.0.RELEASE</version>
</dependency>
bootstrap.yml 配置spring:
application:
name: nacos-config
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848
file-extension: yaml
prefix: nacos-config
profiles:
active: dev
Nacos 配置Nacos 上创建配置文件名称格式:
p
r
e
f
i
x
−
{prefix}-
prefix−{spring.profile.active}.${file-extension},如上一步bootstrap.yml的配置可知,我要创建的配置名为:nacos-config-dev.yaml,内容如下:
创建 Controller动态获取用户名称的功能为例:创建一个对外接口 /username 代码如下:@RestController
@RefreshScope
public class ConfigController {
@Value("${username:wangzg}")
private String username;
@RequestMapping("/username")
public String userNameInfo() {
return username;
}
}
注意:Controller 上要添加 @RefreshScope注解 它实现了配置的热加载。验证结果本地运行项目,可以看到项目的启动时,端口已变为我们在 Nacos 上配置的端口8090。在浏览器访问链接:http://localhost:8090/username,返回 testuser。修改 Nacos 上 username 的值,不需要重启微服务,重新请求链接 username 的值会动态变。可见 Nacos 作为配置中心实现了热加载功能。2.3 注册中心创建服务提供者创建微服务可参上面配置中心的创建方式,创建对外接口 /sayHello 代码如下:@RestController
public class ProviderController {
@GetMapping("/sayHello")
public String sayHello(@RequestParam(value = "name",defaultValue = "helloWord")String sayHello){
return "tom say: " + sayHello;
}
}
启动服务,访问地址:http://localhost:8099/sayHello,可输出:
tom say: helloWord,表示微服务已创建成功。创建服务消费者这里采用 FeignClient 的方式实现跨服务间调用(有兴趣的同学也可以研究一下RestTemplate的方式)。pom 文件在 nacos-consumer 的 pom 文件要添加 Feigin-Client 的 maven 依赖。
org.springframework.cloud
spring-cloud-starter-openfeign
添加注解在微服务启动类 *Application.java 添加注解 @EnableFeignClients。创建 FeignClient@FeignClient(“nacos-provider”)
public interface ProviderClient {
@GetMapping("/sayHello")
String sayHello(@RequestParam(value = "name", defaultValue = "wangzg", required = false) String name);
}
说明:FeignClient 注解传入的 name,指定 FeignClient 的名称,如果项目使用了 Ribbon,name 属性会作为微服务的名称,用于服务发现。创建 ConsumerController@RestController
public class ConsumerController {
@Autowired
ProviderClient providerClient;
@GetMapping("/hi-feign")
public String hiFeign(){
return providerClient.sayHello("feign");
}
}
重启工程,在浏览器上访问http://localhost:8090/hi-feign,可以在浏览器上展示正确的响应,这时 nacos-consumer 调用 nacos-provider 服务成功。下面一张请求流转的时序图,这样理解清晰一些。项目地址:https://github.com/hellowHuaairen/wangzgSpringBootTest三、最后微服务有四大特点:小(微服务粒度小)独(独立部署运行和扩展)轻(系统简洁轻量化)松(高内聚低耦合)要完成一个复杂系统往往需要很多微服务单元,而衔接每个微服务,完成微服务的统一管理就非常有必要,所以集成服务管理中心和配置中心的产品就的就应运而生,而 Nacos 是其中的佼佼者!教程至此,你应该也能对 Nacos 有一些了解!光看不练假把式,最快的学习方式莫过于模仿,再通过举一反三才能融会贯通。每一种新工具都是对老工具的革新,有兴趣的小伙伴可以参考我上面的案例,在实践中会发现更多乐趣!四、参考资料官方文档: https://nacos.io/zh-cn/docs/what-is-nacos.html
作者:削微寒
扫描左侧的二维码可以联系到我
本作品采用署名-非商业性使用-禁止演绎 4.0 国际 进行许可。 分类: 讲解开源项目系列好文要顶 关注我 收藏该文 削微寒
关注 - 14
粉丝 - 2476 推荐博客+加关注 4 0
« 上一篇: 保持ssh不自动断开 posted @ 2020-11-12 09:55 削微寒 阅读(753) 评论(1) 编辑 收藏
评论列表 回复 引用 #1楼 47366342020/11/12 上午10:22:212020-11-12 10:22 三合视角 nacos确实不错,支持 支持(0) 反对(0) https://pic.cnblogs.com/face/1323385/20200318151830.png 刷新评论刷新页面返回顶部
发表评论 【福利】注册AWS账号,立享12个月免费套餐 编辑预览 7693b08a-a8f6-49f3-f45a-08d88556cc23 Markdown 帮助自动补全 不改了退出 订阅评论 [Ctrl+Enter快捷键提交]
首页 新闻 博问 专区 闪存 班级 【推荐】News: 大型组态、工控、仿真、CADGIS 50万行VC++源码免费下载
【推荐】博客园 & 陌上花开HIMMR 给单身的程序员小哥哥助力脱单啦~
【推荐】博客园 & 示说网联合策划,AI实战系列公开课第二期
【推荐】了不起的开发者,挡不住的华为,园子里的品牌专区
【推荐】未知数的距离,毫秒间的传递,声网与你实时互动
【福利】AWS携手博客园为开发者送免费套餐与抵扣券
【推荐】 阿里云折扣价格返场,错过再等一年
最新 IT 新闻:
· 拼多多财报电话会议实录:多多买菜并非社区拼团购物
· 久经沙场的战士对决:张小龙大战张一鸣
· 双十一吐槽:异化与集体无意识
· 小鹏汽车上市后首份财报:营收19亿 首度实现毛利转正
· 腾讯第三季度总收入为1254.47亿元 同比增长29%
» 更多新闻… 历史上的今天:
2019-11-12 Python 命令行之旅:深入 click 之参数篇
公告 昵称: 削微寒
园龄: 5年5个月
荣誉: 推荐博客
粉丝: 2476
关注: 14 +加关注
积分与排名 积分 - 554021 排名 - 544 随笔分类 git(17) GitHub 热点速递(11) HelloDjango(48) HelloGitHub(108) HelloVue(3) linux(23) Python(38) Python Web(17) SQL和MySQL(16) 大数据(5) 翻译(14) 感悟(3) 工具(6) 讲解开源项目系列(57) 解决error(25) 爬虫(4) 前端(3) 让开源带你进入编程的世界系列(3) 数据结构与算法(2) 杂(4) 随笔档案 2020年11月(8) 2020年10月(9) 2020年9月(17) 2020年8月(17) 2020年7月(16) 2020年6月(10) 2020年5月(10) 2020年4月(10) 2020年3月(13) 2020年2月(12) 2020年1月(7) 2019年12月(10) 2019年11月(9) 2019年10月(13) 2019年9月(14) 2019年8月(16) 2019年7月(9) 2019年6月(5) 2019年5月(1) 2019年4月(1) 2019年3月(1) 2019年2月(1) 2019年1月(1) 2018年12月(5) 2018年11月(2) 2018年10月(2) 2018年9月(3) 2018年8月(1) 2018年7月(2) 2018年6月(6) 2018年5月(4) 2018年4月(1) 2018年3月(2) 2018年2月(1) 2018年1月(1) 2017年12月(1) 2017年11月(1) 2017年10月(1) 2017年9月(2) 2017年8月(2) 2017年7月(9) 2017年6月(4) 2017年5月(5) 2017年4月(7) 2017年3月(4) 2017年2月(3) 2017年1月(6) 2016年12月(7) 2016年11月(5) 2016年10月(4) 2016年9月(5) 2016年8月(9) 2016年7月(3) 2016年6月(5) 2016年5月(19) 2016年4月(6) 2016年3月(12) 2016年2月(4) 2016年1月(11) 2015年12月(3) 2015年11月(4) 2015年10月(2) 2015年9月(1) 2015年7月(1) 2015年6月(10) 2015年5月(15) 阅读排行榜 1. [Python]新手写爬虫全过程(已完成)(175944) 2. [python]pip常用命令(转载)(112293) 3. supervisor 安装、配置、常用命令(68846) 4. [git]merge和rebase的区别(61246) 5. python转义字符——重点解释:\b,\n和\r区别(48936)
Copyright © 2020 削微寒
Powered by .NET 5.0.0 on Kubernetes