微服务实战(三)集成服务注册发现中心 - Nacos
本章主要讲述如何使用服务注册发现中心
SpringCloud默认的注册中心 eurka 已经停止更新,通过比较,发现阿里的SpringCloud Alibaba 是一个比较不错的选择,其中它的注册中心使用的是 Nacos。
SpringCloud Alibaba的git:
https://gitee.com/mirrors/Spring-Cloud-Alibaba
https://github.com/alibaba/spring-cloud-alibaba
Nacos官网:https://nacos.io
Nacos的安装
1.预备环境准备
Nacos 依赖 Java 环境来运行。如果您是从代码开始构建并运行Nacos,还需要为此配置 Maven环境,请确保是在以下版本环境中安装使用:
- 64 bit OS,支持 Linux/Unix/Mac/Windows,推荐选用 Linux/Unix/Mac。
- 64 bit JDK 1.8+;下载 & 配置。
- Maven 3.2.x+;下载 & 配置。
2.下载源码或者安装包
你可以通过源码和发行包两种方式来获取 Nacos。
从 Github 上下载源码方式
git clone https://github.com/alibaba/nacos.git cd nacos/ mvn -Prelease-nacos -Dmaven.test.skip=true clean install -U ls -al distribution/target/// change the $version to your actual path cd distribution/target/nacos-server-$version/nacos/bin
下载编译后压缩包方式
您可以从 最新稳定版本 下载
nacos-server-$version.zip
包。unzip nacos-server-$version.zip 或者 tar -xvf nacos-server-$version.tar.gzcd nacos/bin
3.启动服务器
Linux/Unix/Mac
启动命令(standalone代表着单机模式运行,非集群模式):
sh startup.sh -m standalone
如果您使用的是ubuntu系统,或者运行脚本报错提示[[符号找不到,可尝试如下运行:
bash startup.sh -m standalone
Windows
启动命令:
cmd startup.cmd
或者双击startup.cmd运行文件。
4.服务注册&发现和配置管理
服务注册
curl -X POST 'http://127.0.0.1:8848/nacos/v1/ns/instance?serviceName=nacos.naming.serviceName&ip=20.18.7.10&port=8080'
服务发现
curl -X GET 'http://127.0.0.1:8848/nacos/v1/ns/instance/list?serviceName=nacos.naming.serviceName'
发布配置
curl -X POST "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test&content=HelloWorld"
获取配置
curl -X GET "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test"
5.关闭服务器
Linux/Unix/Mac
sh shutdown.sh
Windows
cmd shutdown.cmd
或者双击shutdown.cmd运行文件。
Nacos安装完成后,启动。
Nacos控制台
除了官网安装文档中所写的用命令接口方式使用注册、发现、配置等功能,还可以直接访问http://部署IP:8848/nacos
进入到Nacos的控制台界面,默认账号密码是 nacos/nacos
在SpringBoot项目中使用SpringCloud Alibaba Nacos
首先我们建立一个服务提供者的工程,也就是一个SpringBoot工程,和上一章一样,写一个简单的接口。与之不同的是,这个接口将会通过Nacos的discovery组件发布到Nacos的服务器上。
工程结构如下:
特别强调一下,这里主要使用了 spring-boot,spring-cloud,spring-cloud-alibaba。
其中版本分别是:(版本问题没弄清楚的话,各种编译不起来!)
<spring.boot.version>2.1.0.RELEASE</spring.boot.version>
<spring.cloud.version>Greenwich.SR2</spring.cloud.version>
<spring.cloud.alibaba.version>2.1.0.RELEASE</spring.cloud.alibaba.version>
这里有个详细的版本对应表:https://start.spring.io/actuator/info
完整的pom.xml文件如下
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.zjf.csdn</groupId><artifactId>combat-provider</artifactId><version>0.0.1-SNAPSHOT</version><description>zjf微服务实战</description><name>combat-provider</name><url>https://blog.csdn.net/u011177064</url><properties><!-- Dependency Versions --><spring.boot.version>2.1.0.RELEASE</spring.boot.version><spring.cloud.version>Greenwich.SR2</spring.cloud.version><spring.cloud.alibaba.version>2.1.0.RELEASE</spring.cloud.alibaba.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><!-- Lombok --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>${spring.boot.version}</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring.cloud.version}</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>${spring.cloud.alibaba.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.1</version><configuration><source>1.8</source><target>1.8</target></configuration></plugin></plugins></build><profiles><profile><id>spring</id><repositories><repository><id>spring-snapshots</id><name>Spring Snapshots</name><url>https://repo.spring.io/libs-snapshot-local</url><snapshots><enabled>true</enabled></snapshots><releases><enabled>false</enabled></releases></repository><repository><id>spring-milestones</id><name>Spring Milestones</name><url>https://repo.spring.io/libs-milestone-local</url><snapshots><enabled>false</enabled></snapshots></repository><repository><id>spring-releases</id><name>Spring Releases</name><url>https://repo.spring.io/release</url><snapshots><enabled>false</enabled></snapshots></repository></repositories><pluginRepositories><pluginRepository><id>spring-snapshots</id><name>Spring Snapshots</name><url>https://repo.spring.io/libs-snapshot-local</url><snapshots><enabled>true</enabled></snapshots><releases><enabled>false</enabled></releases></pluginRepository><pluginRepository><id>spring-milestones</id><name>Spring Milestones</name><url>https://repo.spring.io/libs-milestone-local</url><snapshots><enabled>false</enabled></snapshots></pluginRepository><pluginRepository><id>spring-releases</id><name>Spring Releases</name><url>https://repo.spring.io/libs-release-local</url><snapshots><enabled>false</enabled></snapshots></pluginRepository></pluginRepositories></profile></profiles></project>
application.yml 内容如下:
server:port: 9999
spring:application:name: nacos-providercloud:nacos:discovery:server-addr: <Nacos服务安装后的部署IP>:8848
management:endpoints:web:exposure:include: "*"
写一个简单的Rest接口
package com.zjf.combat.api.nacos;import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;@RestController
public class NacosProviderApi {@GetMapping(value = "/nacos/{string}")public String nacos(@PathVariable String string) {return "Hello Nacos Discovery " + string;}
}
SpringBoot的启动类,需要添加 @EnableDiscoveryClient 注解,将扫描到的接口注册到Nacos服务中心。
package com.zjf.combat;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.context.annotation.ComponentScan;/*** Nacos 启动器* @author zhaojunfu**/
@SpringBootApplication
@EnableDiscoveryClient
@ComponentScan
public class NacosApplication {public static void main(String[] args) {SpringApplication.run(NacosApplication.class, args);}
}
如果像我一样幸运的话,写好这些,直接运行起来,就可以在Nacos控制台看到注册进来的服务了。
接下来写一个消费者工程,通过注册发现中心,去获取到目标接口的实际路径,然后进行调用。
工程结构如下:
pom.xml 与 服务提供者的pom.xml保持一样就行。
application.yml 内容如下:
server:port: 9998
spring:application:name: nacos-consumercloud:nacos:discovery:server-addr: <Nacos服务安装后的部署IP>:8848
management:endpoints:web:exposure:include: "*"
消费者工程主要是通过 LoadBalancerClient 从Nacos注册中心获取< ID:nacos-provider 服务提供者>注册上去的接口信息,包括IP,端口等,然后用RestTemplate拼接好完整的接口地址去调用。现在还没有涉及到服务网关这些组件,仅仅是去实践服务注册与发现中心的功能,后续是由网关负责接口寻址,负载均衡这些。
package com.zjf.combat.api.nacos;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;@RestController
public class NacosConsumerApi {@Value("${spring.application.name}")private String appName;private RestTemplate restTemplate = new RestTemplate();@Autowiredprivate LoadBalancerClient loadBalancerClient;@RequestMapping(value = "/nacos/{str}", method = RequestMethod.GET)public String nacos(@PathVariable String str) {// 使用 LoadBalanceClient 和 RestTemolate 结合的方式来访问ServiceInstance serviceInstance = loadBalancerClient.choose("nacos-provider");String url = String.format("http://%s:%s/nacos/%s", serviceInstance.getHost(), serviceInstance.getPort(),appName);System.out.println("request url:" + url);return restTemplate.getForObject(url, String.class);}}
启动消费者工程,然后再去Nacos控制台瞅一瞅!此时消费者和生产者都在Nacos中上线了。
然后调用一下消费者的测试接口
对比一下实现代码,调用链是这样的:
http get请求---》消费者接口---》消费者从Nacos寻址---》获取实际接口信息---》调用实际接口
微服务实战(三)集成服务注册发现中心 - Nacos相关推荐
- controller调用controller的方法_SpringCloud Alibaba微服务实战三 - 服务调用
导读:通过前面两篇文章我们准备好了微服务的基础环境并让accout-service 和 product-service对外提供了增删改查的能力,本篇我们的内容是让order-service作为消费者远 ...
- SpringCloud Alibaba微服务实战三 - 服务调用
SpringCloud Alibaba微服务实战三 - 服务调用 通过前面两篇文章我们准备好了微服务的基础环境并运行注册服务到nacos上了 统一接口返回结构 在开始今天的正餐之前我们先把上篇文章中那 ...
- go语言高并发与微服务实战_go-micro+gin+etcd微服务实战之服务注册与发现
在构建微服务时,使用服务发现可以减少配置的复杂性,本文以go-micro为微服务框架,使用etcd作为服务发现服务,使用gin开发golang服务. 使用gin 的原因是gin能够很好的和go-mic ...
- SpringCloud Alibaba微服务实战(三) - Nacos服务创建消费者(Feign)
什么是Feign Feign 是一个声明式的伪 Http 客户端,它使得写 Http 客户端变得更简单.使用 Feign,只需要创建一个接口并注解.它具有可插拔的注解特性,可使用 Feign 注解和 ...
- Spring Cloud 微服务实战系列-Eureka注册中心(二)
导语 之前的分享中,简单的介绍了SpringBoot的入门知识以及如何使用Eureka搭建服务注册中心,这一次的分享主要是来讲解一些在Eureka中的常用的配置,方便大家在使用Eureka的时候可 ...
- Spring Cloud 微服务实战系列-Eureka注册中心(一)
导语 在这一个系列的分享中,笔者主要是来分享在实战实际操作中的一些使用场景,了解了实战的操作中的使用场景才能更好的从实战中的问题出发找到自己需要的原理性的东西,找到原理性的东西之后才可以更好的根据 ...
- SpringCloud Alibaba 2021微服务实战三十二 集成RocketMQ实现分布式事务
目录 基于RocketMQ分布式事务 - 完整示例 2.解决方案 2.1.本地消息表方案 2.2.RocketMQ事务消息方案 一.事务消息 二.订单服务 1.事务日志表 2.TransactionM ...
- java 限流熔断_SpringCloud Alibaba微服务实战五 - 限流熔断
简介 Sentinel是面向分布式服务框架的轻量级流量控制框架,主要以流量为切入点,从流量控制,熔断降级,系统负载保护等多个维度来维护系统的稳定性.在SpringCloud体系中,sentinel主要 ...
- SpringCloud Alibaba微服务实战(四) - Nacos Config 配置中心
说在前面 Nacos 是阿里巴巴开源的一个更易于构建云原生应用的动态服务发现.配置管理和服务管理平台.Nacos Config就是一个类似于SpringCloud Config的配置中心. 一.启动N ...
最新文章
- 干货满满的 Python 实战项目,点赞收藏
- 文巾解题 82. 删除排序链表中的重复元素 II
- 清单革命:为什么不仅是工具革命?
- GridView RadioButton 解决办法(一) -- 实现单选
- 基于nginx实现minio分布式集群访问的负载均衡配置示例
- 深度学习—机器学习(神经网络2)
- 1.2.4 Selecting a defualt database
- 崛起吧,亲爱的,该背单词了!!!
- 万字长文,带你彻底理解EF Core5的运行机制,让你成为团队中的EF Core专家
- 【模板】Manacher算法
- 统计MySQL中某数据库硬盘占用量大小
- python定时发送微信消息_Python3 itchat实现微信定时发送群消息的实例代码
- 磁盘测试----fio
- 腾讯朋友、钉钉等被微信违规公示点名;谷歌更新安卓修复数百万台芯片漏洞;微软终止支持.NET Core 3.0 | 极客头条...
- Hystrix dashbord 服务降级熔断限流监控介绍
- svpwm的matlab模型,svpwm的MATLAB仿真实现(转载)
- 高速缓冲存储器(Cathe)简述
- Android开发——应用宝推广渠道出现MD5值重复,请勿重复上传
- 解决gateway转发websocket出现Max frame length of 65536 has been exceeded
- python中θ符号怎么打出来_各种符号在键盘上怎么打出来?
热门文章
- 有哪些适合学生党的蓝牙耳机?高性价比学生蓝牙耳机推荐
- 三十四载 Windows 崛起之路: 苹果、可视都是微软“铺路石”
- Karto_SLAM研究
- 四川途志:抖音主播在直播时需要注意什么?
- 机器学习--决策树算法
- Altium Designer如何汉化
- 项目问题合集dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-thyme
- 基于STM32安装Stm32CubeMX,配合Keil完成LED流水灯和USART串口通讯程序,及其管脚的时序波形观察
- Ubuntu 虚拟机无法启动 Oh no Something has gone wrong. A problem has occurred and the system can‘t recover.
- 访问 Swagger ui 弹窗