微服务feignclient_搞微服务用阿里开源的 Nacos 真香啊

本文适合有 Java 基础知识的人群

3b7a71925e2cd1329c69b4e17f8ef207.png

本文作者:HelloGitHub-秦人

HelloGitHub 推出的《讲解开源项目》系列,今天给大家带来一款开源 Java 版可以实现动态服务发现,配置和服务管理平台——Nacos,它是阿里巴巴团队推出的,符合国人的一切使用习惯,并且中文文档丰富,开源社区也特别活跃。

项目源码地址:https://github.com/alibaba/nacos

一、项目介绍

在选择使用一个工具之前,我们先大概了解一下它的同类型产品,这样更能看出它的价值。

0265e68db4f7ad83c522f42f05f4672d.png

提供了一组简单易用的特性集,帮助开发者快速实现动态服务发现、服务配置、服务元数据及流量管理。主要特性:

  • 服务发现:支持基于 DNS 和基于 RPC 的服务发现。服务提供者使用 原生SDK、OpenAPI、或一个独立的 Agent TODO 注册 Service 后,服务消费者可以使用 DNS TODO 或 HTTP&API 查找和发现服务。
  • 服务健康监测:提供对服务的实时的健康检查,阻止向不健康的主机或服务实例发送请求。
  • 动态配置服务:动态配置服务可以让您以中心化、外部化和动态化的方式管理所有环境的应用配置和服务配置。
  • 动态 DNS 服务:动态 DNS 服务支持权重路由,使用者更容易地实现中间层负载均衡、更灵活的路由策略、流量控制以及数据中心内网的简单DNS解析服务。
  • 服务及其元数据管理:Nacos 能让使用者从微服务平台建设的视角管理数据中心的所有服务及元数据,包括管理服务的描述、生命周期、服务的静态依赖分析、服务的健康状态、服务的流量管理、路由及安全策略、服务的 SLA 以及最首要的 metrics 统计数据。

Nacos 生态图

8e6a5edba079b34f32d6963fbc7e3318.png

二、SpringBoot 实战

Nacos 主要的功能有配置中心和注册中心。

  • 配置中心:通过在 Nacos 上配置用户名,在不重启微服务的情况下实现动态获取配置信息功能。
  • 注册中心:创建两个微服务:服务提供者和服务消费者,实现微服务间调用。消费者要调用提供者的接口,只需要声明提供者的微服务名称和接口的请求地址,Nacos 就可准确地找到到对应的接口。

2.1 运行 Nacos

下载地址:https://github.com/alibaba/nacos/releases

unzip nacos-server-$version.zip  #解压cd nacos/binstartup.cmd -m standalone #单机模式

访问首页

Nacos 的访问地址:http://localhost:8848/nacos/ 默认账号密码:nacos nacos

页面截图如下:

f87969cdcd264b7e3ef2367e03506834.png

2.2 配置中心

创建微服务项目

创建 SpringBoot 项目主要有三种方式:通过网站创建,IntelliJ IDEA 的 Spring Initializr 工具创建,Maven 创建项目形式创建。

项目的pom 文件内容如下:

            org.springframework.boot        spring-boot-starter-web                org.springframework.boot        spring-boot-starter-test        test                    org.springframework.cloud        spring-cloud-starter-alibaba-nacos-discovery        0.9.0.RELEASE    

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 上创建配置文件名称格式:${prefix}-${spring.profile.active}.${file-extension},如上一步bootstrap.yml的配置可知,我要创建的配置名为:nacos-config-dev.yaml,内容如下:

e948cac1abe31594e8fe63998b2cf90d.png

创建 Controller

动态获取用户名称的功能为例:

创建一个对外接口 /username 代码如下:

@RestController@RefreshScopepublic class ConfigController {    @Value("${username:wangzg}")    private String username;    @RequestMapping("/username")    public String userNameInfo() {        return username;    }}

注意:Controller 上要添加 @RefreshScope注解 它实现了配置的热加载。

验证结果

本地运行项目,可以看到项目的启动时,端口已变为我们在 Nacos 上配置的端口8090。

c02ab5f30aca3dd0b60735dc2d7bca2e.png

在浏览器访问链接:http://localhost:8090/username,返回 testuser。修改 Nacos 上 username 的值,不需要重启微服务,重新请求链接 username 的值会动态变。可见 Nacos 作为配置中心实现了热加载功能。

2.3 注册中心

  1. 创建服务提供者

创建微服务可参上面配置中心的创建方式,创建对外接口 /sayHello 代码如下:

@RestControllerpublic 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,表示微服务已创建成功。

  1. 创建服务消费者

这里采用 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

@RestControllerpublic class ConsumerController {    @Autowired    ProviderClient providerClient;    @GetMapping("/hi-feign")    public String hiFeign(){       return providerClient.sayHello("feign");    }}

重启工程,在浏览器上访问 http://localhost:8090/hi-feign,可以在浏览器上展示正确的响应,这时 nacos-consumer 调用 nacos-provider 服务成功。

下面一张请求流转的时序图,这样理解清晰一些。

37ec9438177432f32ce7d249e3d4b4cd.png

项目地址:https://github.com/hellowHuaairen/wangzgSpringBootTest

三、最后

微服务有四大特点:

  • 小(微服务粒度小)
  • 独(独立部署运行和扩展)
  • 轻(系统简洁轻量化)
  • 松(高内聚低耦合)

要完成一个复杂系统往往需要很多微服务单元,而衔接每个微服务,完成微服务的统一管理就非常有必要,所以集成服务管理中心和配置中心的产品就的就应运而生,而 Nacos 是其中的佼佼者!

教程至此,你应该也能对 Nacos 有一些了解!光看不练假把式,最快的学习方式莫过于模仿,再通过举一反三才能融会贯通。每一种新工具都是对老工具的革新,有兴趣的小伙伴可以参考我上面的案例,在实践中会发现更多乐趣!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/543367.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

华为mate40搭载鸿蒙,华为mate40搭载鸿蒙还是EMUI11,答案来了

原标题:华为mate40搭载鸿蒙还是EMUI11,答案来了今年秋季苹果要发布首款5G版iPhone手机iPhone12,搭载A14处理器首发iOS14系统。而华为也要发布新款旗舰手机华为mate40系列手机,搭载华为麒麟1020处理器,首发EMUI11系统。…

称重管理系统如何修改重量_无人值守称重系统硬件配置和作用

1. 视频监控抓拍系统软件配合设摄像头在保存数据的同时抓拍,防止车辆或者人为的舞弊行为2. 红外定位在地磅否的两侧各安装一对红外对射,通过信号线连接到开关,当红外的光束被阻挡时,红外定位系统将自动发出警告,禁止称…

在建工程直接费用化_威县垃圾发电在建项目被罚后续:现已整改

新京报讯(记者 李大伟)3月11日,针对此前因环保问题被处罚一事,威县垃圾发电在建项目(下称威县项目)的项目方宁夏电力建设工程公司相关负责人罗中辉表示:目前,该项目已整改完成。“所有道路上的浮土已彻底清扫,所有的裸…

centos 断电重启后,文件系统损坏修复

为什么80%的码农都做不了架构师?>>> centos 断电重启后,由于文件系统损坏,无法正常开机,常常出现“an error occurred during the file system check” 提示,就是说系统文件损坏啦,这时候要用f…

如何对聚类结果进行分析_如何更合理地给聚类结果贴标签——由一个挖掘学生用户的项目说开去...

”聚类一时爽,判断两行泪“——这是解决任何一个无监督问题时都会面临的苦恼:最近接到了一个无监督问题的项目——给一群无标签的结构化数据贴标签,随后我便立即展开了工作,首先开始查阅资料,然后把EDA(数据探索) 、特…

查看文件二进制编码_小白也能学会系列:用python文件读写代码实例!(简单案例)...

前言:不久之前,从一个.dat文件中读取波形数据,通过一个自编码网络进行异常检测。所以特意在此写出来,咱从最基础的文件读写开始吧。先说数据,是一个int16型的数组。说是数组,但是读取也并不简单。众所周知&…

stm32 ucosii消息队列 串口_STM32F1的UART4串口配置

注意是UART4,不是USART4在stm32中UART和USART是不相同的USART是通用同步/异步串行接收/发送器UART是通用异步收发传输器简单区分同步和异步就是看通信时需不需要对外提供时钟输出,我们平时用的串口通信基本都是 UART。USART支持同步模式,因此…

程序员微信头像_微信头像暴露了你的层次:层次越低的人,越喜欢用这些头像...

这个话题,原本很轻松。但往细里看,它背后玄机很多。许多未知理论与认知可能性,往往就在不为人知的拐角处。卞之琳有一首诗:你站在桥上看风景,看风景的人在楼上看你。明月装饰了你的窗子,你装饰了别人的梦。…

华为鸿蒙系统正式拜拜,从“哄蒙”到“鸿蒙”,现在,正式对华为鸿蒙OS说你好!...

从鸿蒙发布之初一直到现在,很多网友都为鸿蒙出谋划策,毕竟是我们自己的系统,而现在也确实需要一套自研的、成熟的智能操作系统了。再加上鸿蒙万物互联的这个大设想,大家伙确实是很兴奋,同时在这个时代里面,…

英文书《用unreal来学习c++》_用机器学习来概括《哈利波特》,四句话总结一场戏...

毒栗子 发自 凹非寺量子位 出品 | 公众号 QbitAI文章太长读不下去的时候,就想有个TL;DR按钮,用最短的时间,看最关键的部分。要是视频很长不想看,该怎么挑重点食用?一位叫做Sagi Shaier的程序猿,用机器学习给…

什么是负边沿触发_用好示波器必须学会的知识:触发方式

我们先简单回顾下什么是示波器的触发。由于信号无时无刻都在变化,如果一股脑的都把他们显示在示波器上,就会很乱,根本无法让我们看清楚,从而也就无法观察信号来解决问题。考虑到信号大多数时候都是以某种规律周期性出现的&#xf…

html placehonlder属性,HTML input placeholder 属性

HTML placeholder 属性实例 1带有 placeholder 文本的两个输入字段:尝试一下 placeholder 文本也可以指定颜色。实例 2带有 placeholder 文本设置颜色:尝试一下 浏览器支持Internet Explorer 10、Firefox、Opera、Chrome 和 Safari 支持 placeholder 属性…

python画图显示不了中文_完美解决Python matplotlib绘图时汉字显示不正常的问题

Matplotlib是一个很好的作图软件,但是python下默认不支持中文,所以需要做一些修改,方法如下: 1.在python安装目录的Lib目录下创建ch.py文件。 文件中代码为: 保存,以后通过以下代码调用: #-*-co…

监听一个可下拉区域的滚动监听_Flutter 实现一个悬浮的效果

知乎视频​www.zhihu.com在原来的基础布局下修改江景:Flutter 实现钉钉侧边栏​zhuanlan.zhihu.com修改 DTMessageScreen使用 Stack 作为容器且套 SingleChildScrollView ,监听 controller 滚动事件再 Stack 容器中多添加一个DTMessageTopQuick&#xff…

【Hive】——函数案例

1 Hive 多字节分隔符处理 1.1 默认规则 Hive默认序列化类是LazySimpleSerDe,其只支持使用单字节分隔符(char)来加载文本数据,例如逗号、制表符、空格等等,默认的分隔符为”\001”。根据不同文件的不同分隔符&#xf…

qaxwidget传递参数到html,记一次QT使用QAxWidget打开.html文件调用显示离线百度地图不能缩放,自定义图片不能显示解决方法...

主要问题: 一开始用的是在线的,都没有什么问题,自定义图片均可以显示,可是后面试了一下离线百度地图,在qt中运行打开.html文件和在电脑上面直接双击打开此文件显示是有差别的,在qt生成的程序中,…

爬虫找工作要掌握什么_找爬虫工作必须掌握scrapy框架究竟什么?

十个爬虫九个python写,九个python爬虫全部由scrapy写。社会上在招聘爬虫工程师时,百分之百会需要掌握scrapy爬虫框架。但是scrapy十个什么东西你知道吗?什么是scrapy我们先看百科词条scrapyScrapy是我们熟知的爬虫框架,我们用scra…

性能计数器驱动_【Nature Sustainability】机械力驱动的摩擦电高效空气负离子发生器...

空气负离子被称为空气“维他命”,是一种电迁移率在1-2 cm2 V-1 S-1的小离子。就目前的科学研究表明,他们对空气中PM物质的净化,有害有机物的分解,以及细菌的抑制均具有重要的作用。除了自然界中在深林,瀑布和暴雨时产生…

安装gem_Python安装第三方库及常见问题处理方法汇总

源码安装Python第三方库几乎都可以在github或者 pypi上找到源码。源码包格式大概有zip 、 tar.zip、 tar.bz2。解压这些包,进入解压好的文件夹,通常会有一个setup.py的文件。打开命令行,进入该文件夹。运行以下命令,就能把这个第三…

No style sheet with given id found错误

在chrome中打开html页面,报错No style sheet with given id found,解决方如下 转载于:https://www.cnblogs.com/lcyuhe/p/5439832.html