需求描述
当我们把一个单体的业务拆分之后,我们需要业务直接调用,就可以通过Nacos实现远程调用。
nacos与eureka对比
1、nacos与eureka的共同点
都支持服务注册和服务拉取
都支持服务提供者心跳的方式做健康检测
2、nacos与eureka的区别
nacos支持服务端主动检测提供者状态:临时实例采用心跳模式,非临时实例采用主动检测模式(一般情况下都使用临时实例,主动检测消费的服务器资源较大,服务器压力大)
临时实例心跳不正常会被剔除,非临时实例则不会被剔除
nacos支持服务列表变更的消息推送模式,服务列表更新及时
nacos集群默认采用AP方式,当集群中存在非临时实例时,采用CP模式;eureka采用AP方式
下载Nacos
github地址:https://github.com/alibaba/nacos/releases?page=3 下载1.4.2的版本即可
nacos官方文档:https://nacos.io/zh-cn/docs/quick-start.html
下载Nacos之后切换到目录
通过命令启动nacos
startup.cmd -m standalone
访问Nacos启动后的地址,暂时还没有可用的服务
添加依赖
在上一章中我们在父工程已经加入了Alibaba的依赖,所以我们只需要给两个子工程添加就可以了。分别在user-service和orders-service的pom.xml中添加即可。
<!-- nacos 客户端 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
配置Nacos
我们Nacos的环境搭建完成之后,需要在子工程中去配置好Nacos的注册
application.yml 配置
server:
port: 8080
http:
encoding:
charset: UTF-8
spring:
application:
name: user-service
datasource:
driverClassName: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/spring-cloud-user?useUnicode=true&useSSL=false&characterEncoding=utf8
username: root
password: root
cloud:
nacos:
server-addr: localhost:8848
启动服务看看是不是在Nacos中注册了服务
运行user-service可以看到nacos服务已经注册了
此时刷新我们的Nacos控制台也可以看到新注册的服务,这样我们的服务就注册成功了
调用远程服务
服务注册完成之后我们需要进行远程服务调用,这里我们就要介绍“feign”了,它可以轻松的实现远程服务调用,不需要我们通过复杂的http请求进行服务调用,学习成本几乎为零。
我们上一节已经完成了user-service和orders-service的编写,我们现在需要从orders-service中调用user-service获取用户信息,所以我们要在orders-service模块中添加Feifn依赖
Feign依赖添加
<!-- Feign-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
编写远程调用代码
最后我们在Controller中去调用这个Client
最后我们把这两个服务启动,访问orders-service去获取订单详情,可以看到获取到了User的信息