Spring Cloud Alibaba 之 Nacos 服务注册与发现
服务注册与发现,服务发现主要用于实现各个微服务实例的自动化注册与发现,是微服务治理的核心,学习 Spring Cloud Alibaba,首先要了解框架中的服务注册和发现组件——Nacos。
一、Spring Cloud 服务注册和发现组件
1.Spring Cloud Eureka 闭源风波
在Spring Cloud的子项目中,Spring Cloud Netflix提供了Eureka来实现服务的发现功能,Eureka的服务发现包含两大组件:服务端发现组件(EurekaServer)和客户端发现组件(Eureka Client)。Eureka的服务发现机制如图所示。
当客户端服务通过注解等方式嵌入到程序的代码中运行时,客户端发现组件就会向注册中心注册自身提供的服务,并周期性地发送心跳来更新服务,如果连续三次心跳都不能够发现服务,那么Eureka就会将这个服务节点从服务注册表中移除。各个服务之间会通过注册中心的注册信息以Rest方式来实现调用,并且可以直接通过服务名进行调用。
2012年,Netflix 将 Euerka 开源,Euerka 在 Spring Cloud 中广泛应用,但是2018年6月, Netflix 宣布 Euerka 2.0 闭源,目前社区中集成的都是1.0版本,闭源之后,服务发现选择哪个组件,答案就是 Nacos。
2.阿里巴巴开源 Nacos
阿里巴巴官方给Nacos的定位是「一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台」。Nacos支持的功能包括服务发现,集成配置中心,和服务数据管理。
二、Nacos本地安装和启动
可以通过源码和发行包两种方式来获取 Nacos,下面我们下载源码并且构建。
从 Github 上下载源码并编译
git clone https://github.com/alibaba/nacos.git cd nacos/ mvn -Prelease-nacos clean install -U ls -al distribution/target/ // change the $version to your actual path cd distribution/target/nacos-server-$version/nacos/bin
启动Nacos服务
Linux/Unix/Mac系统
启动命令(standalone代表着单机模式运行,非集群模式):
sh startup.sh -m standalone
Windows系统
启动命令:
`
cmd startup.cmd
`
或者双击startup.cmd运行文件
应用启动之后,访问 http://127.0.0.1:8848/nacos/,Nacos0.8 版本已经支持简单登录功能,默认用户名/密码为: nacos/nacos。
三、集成 Spring Cloud 服务发现
如果你还不是很熟悉 Spring Cloud 项目的创建,可以先看一下前面这篇博文,。
最新的版本关系查看 版本说明Wiki
创建服务提供者
1.新建 Spring Boot 工程,命名为 nacos-spring-cloud,在中添加 Nocos 的依赖,注意:版本 0.2.x.RELEASE 对应的是 Spring Boot 2.x 版本,版本 0.1.x.RELEASE 对应的是 Spring Boot 1.x 版本。
<dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <version>0.2.2.RELEASE</version> </dependency> <dependency> <groupId>com.alibaba.nacos</groupId> <artifactId>nacos-client</artifactId> <version>1.1.0</version> </dependency> </dependencies> </dependencyManagement>
2.添加一个模块,nacos-spring-cloud-provider,作为 服务提供者,Pom文件配置如下
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <exclusions> <exclusion> <groupId>com.alibaba.nacos</groupId> <artifactId>nacos-client</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>com.alibaba.nacos</groupId> <artifactId>nacos-client</artifactId> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> <version>5.1.0.Final</version> </dependency> </dependencies>
3.创建启动类,在启动类中添加一个Restful类型的方法,作为服务实现。
@SpringBootApplication @EnableDiscoveryClient @RestController public class NacosProviderApplication { public static void main(String[] args) { SpringApplication.run(NacosProviderApplication.class, args); } @RequestMapping(value = "/hello/{string}", method = RequestMethod.GET) public String echo(@PathVariable String string) { return "Hello " + string; } }
4.修改配置文件,注册到 Nacos 控制台。
server.port=8070 spring.application.name=service-provider spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
5.启动工程,查看 Nacos 控制台。
创建服务消费者
1.添加一个新 module,nacos-spring-cloud-consumer,作为服务消费者。
2.在启动类中添加一个Restful类型的方法,Pom文件依赖如下:
<properties> <spring-cloud-openfeign.version>2.0.0.RELEASE</spring-cloud-openfeign.version> <spring-cloud-netflix.version>2.0.0.RELEASE</spring-cloud-netflix.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-ribbon</artifactId> <version>${spring-cloud-netflix.version}</version> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> <version>${spring-cloud-openfeign.version}</version> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <exclusions> <exclusion> <groupId>com.alibaba.nacos</groupId> <artifactId>nacos-client</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>com.alibaba.nacos</groupId> <artifactId>nacos-client</artifactId> </dependency> </dependencies>
3.创建启动类和测试方法,来调用提供者的服务。
@SpringBootApplication @EnableDiscoveryClient public class NacosConsumerApplication { public static void main(String[] args) { SpringApplication.run(NacosConsumerApplication.class, args); } @LoadBalanced @Bean public RestTemplate restTemplate() { return new RestTemplate(); } }
通过RestTemplate调用服务:
@RestController public class TestController { @Autowired private RestTemplate restTemplate; @RequestMapping(value = "/hello/{str}", method = RequestMethod.GET) public String echo(@PathVariable String str) { return restTemplate.getForObject("http://service-provider/hello/" + str, String.class); } }
4.修改配置文件,订阅服务
server.port=8080 spring.application.name=service-consumer spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
5.启动工程,查看 Nacos 控制台。
6.测试服务调用,正常返回。
四、总结
这个小教程用一个简单的示例,搭建了基于Nacos的 Spring Cloud 服务发现,可以看到 Nacos 的控制台还有配置管理的功能,下一节会学习 Nacos 的配置管理。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
分布式事务——三阶段提交
在前文,我们介绍来了分布式事务,以及分布式事务的解决方案之一的二阶段提交。本文介绍分布式事务处理方案之一的三阶段提交协议。 分布式事务 分布式事务是指发生在多个数据节点之间的事务,分布式事务比单机事务要复杂的多。在分布式系统中,各个节点之间在是相互独立的,需要通过网络进行沟通和协调。由于存在事务机制,可以保证每个独立节点上的数据操作可以满足ACID。但是,相互独立的节点之间无法准确地知道其他节点的事务执行情况。所以从理论上来讲,两个节点的数据是无法达到一致的状态。如果想让分布式部署的多个节点中的数据保持一致性,那么就要保证在所有节点数据的写操作,要么全部都执行,要么全部都不执行。但是,一台机器在执行本地事务的时候无法知道其他机器中的本地事务的执行结果,所以它也就不知道本次事务到底应该commit还是rollback。所以,常规的解决办法就是引入一个"协调者"的组件来统一调度所有分布式节点的执行。 为了解决这种分布式一致性问题,前人在性能和数据一致性的反反复复权衡过程中总结了许多典型的协议和算法。其中比较著名的有二阶提交协议(Two Phase Commitment Protocol)、...
- 下一篇
2019.2版Pycharm设置默认模板
先进入pycharm软件,然后左上角file按钮里面 点击settings选项 一些参数介绍 ${PROJECT_NAME} - 当前Project名称; ${NAME} - 在创建文件的对话框中指定的文件名; ${USER} - 当前用户名; ${DATE} - 当前系统日期; ${TIME} - 当前系统时间; ${YEAR} - 年; ${MONTH} - 月; ${DAY} - 日; ${HOUR} - 小时; ${MINUTE} - 分钟; ${PRODUCT_NAME} - 创建文件的IDE名称; ${MONTH_NAME_SHORT} - 英文月份缩写, 如: Jan, Feb, etc; ${MONTH_NAME_FULL} - 英文月份全称, 如: January, February, etc; 之后创建新的模块我们就可以看到这样的效果:
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8编译安装MySQL8.0.19
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2整合Redis,开启缓存,提高访问速度
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Hadoop3单机部署,实现最简伪集群
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果