nacos介绍
Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service的首字母简称,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。
nacos安装下载
Nacos 1.X 是老版本,将来会停止维护。 建议您使用2.X版本。 请移步到 Nacos2.X相关文档.您可以在Nacos的release notes及博客中找到每个版本支持的功能的介绍,当前推荐的稳定版本为2.2.3。
从github.com上面拉去相关版本,我这边使用2.3.1
不同系统使用命令不一样
Linux/Unix/Mac
启动命令(standalone代表着单机模式运行,非集群模式):
sh startup.sh -m standalone
如果您使用的是ubuntu系统,或者运行脚本报错提示[[符号找不到,可尝试如下运行:
bash startup.sh -m standalone
Windows
启动命令(standalone代表着单机模式运行,非集群模式):
startup.cmd -m standalone
我这边是Windows10,安装成功后直接进入nacos文件目录
打开系统控制命令输入 startup.cmd -m standalone,启动命令(standalone代表着单机模式运行,非集群模式)
nacos服务启动成功
接下来是nacos项目搭建
nacos服务注册/发现
1.jdk版本jdk1.8,springboot2.7.x
2.spring工具构建项目
记得jdk使用1.8不要忘记了。我这边已经安装过了,仅展示用
3.版本选择
勾选springboot2.7.x版本,自己根据情况选择。直接不用添加组件直接进入工作空间,提高开发效率。
这里我搭建了三个服务,一个消费者服务,两个服务提供者,方便后续实现负载均衡使用。构建的方式跟父项目差不多,只是子项目在module中构建其他步骤都一样,这里不详细介绍了。
4.springcloud官网
https://spring.io/projects/spring-cloud
5.spriingcloud alibaba
选择左侧springcloud alibaba,进入依赖管理页面,自行翻译成中文。
6.依赖管理
添加对应依赖管理
<dependencyManagement>
<dependencies> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>2021.0.4.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies>
</dependencyManagement>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.3</version>
<relativePath/>
</parent>
7.服务构建
新建子模块,这里我就不重复讲了,操作都基本一致。新建spring-cloud-nacos9001,spring-cloud-provider9002,spring-cloud-consumer8001三个服务(模块)
添加相关依赖到父项目上
8.配置文件application.yml
分别给两个服务提供者一个消费服务添加配置文件
#服务端口
server:
port: 9001
#spring配置
spring:
application:
name: nacos-provider
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
#端点暴露
management:
endpoints:
web:
exposure:
include=*:
server:
port: 9002
spring:
application:
name: nacos-provider
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
#端点暴露
management:
endpoints:
web:
exposure:
include=*:
server:
port: 8001
spring:
application:
name: spring-cloud-consumer
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
#端点暴露
management:
endpoints:
web:
exposure:
include=*:
# 消费者将要去访问的微服务名称(注册成功的Nacos的微服务提供者)
service-url:
nacos-user-service: http://nacos-provider
9.启动类注解
每个子服务主程序类添加注解@EnableDiscoveryClient
10.nacos服务业务
服务端业务逻辑代码
11.访问服务
消费服务访问,服务提供者业务逻辑
远程服务访问ribbon负载均衡
它是一个基于HTTP和TCP客户端负载均衡器。它虽然只是一个工具类库,它却是每一个微服务的基础设施。因为实际上,对于服务间调用、API网关请求转发都需要经过Ribbon负载均衡来实现。总体来说,Ribbon的主要作用是:从注册服务器端拿到对应服务列表后以负载均衡的方式访问对应服务。要注意的是Nacos已经整合了Ribbon,所以我们想要使用只需要导入Spring Cloud Alibaba Nacos的依赖就可以直接使用了。
启动项目
1.启动三个服务前必须要保证已nacos启动成功才能生效
启动失败
我这里启动项目过程中,服务提供者都成功启动了,消费服务启动失败,报警了,原因是没有添加RestTemplate依赖导致报错。嵌入异常使用负载均衡使用通过RestTemplate获取api失败找不到对应服务,我这边是忘记添加RestTemplate相关依赖导致异常
<!--https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-loadbalancer-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-loadbalancer</artifactId>
<version>3.1.1</version>
</dependency>
启动服务
依赖添加好后还需要添加最关键一步,主程序添加bean依赖。进入消费者服务添加业务逻辑。
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}
restTemplate.getForObject(arg1,arg2,arg3...);
ribbon负载均衡调用
使用RestTemplate对象,通过该对象调用getForObject方法实现ribbon负载均衡.getForObject(arg1,arg2,arg3...)
第一个参数:第一个参数url表示被调用的目标Rest接口位置
1. url的第一部分是在Nacos中注册的服务提供者名称,如果多个服务提供者注册相同名称,Ribbon会自动寻找其中一个服务提供者,并且调用接口方法。这个就是负载均衡功能。
2. url后半部是控制器的请求路径。
第二个参数:返回值类型
JavaBean类型或者JavaBean数组类型,如果控制器返回的是List集合,需要使用数组类型接收。
如文中String.class
第三个参数:
是传递给url的动态参数,使用参数时候需要在url上需要使用{1}、{2}、{3}进行参数占位,这样传递的参数就会自动替换占位符。
测试结果
http://localhost:8001/consumer8001