网站首页 > 博客文章 正文
1、dubbo消费提供者
(1)、需要一个公共的接口服务API,可以理解为一个公共的JAR包
public interface UserService {
// 按照用户id返回所有的收货地址
public List<UserAddress> getUserAddressList(String userId);
}
}
(2)服务提供者提供实现逻辑,并做接口暴露,方便消费者能找到谁实现了,有两种方式:
注解方式:
@Service // 暴露服务
@Component
public class UserServiceImpl implements UserService {
public List<UserAddress> getUserAddressList(String userId) {
//实现逻辑不关心
return null;
}
}
配置方式:
<!-- 当前应用的名字 -->
<dubbo:application name="gmall-user"></dubbo:application>
<!--指定注册中心的地址 -->
<dubbo:registry address="zookeeper://118.24.44.169:2181" />
<!--使用dubbo协议,将服务暴露在20880端口 -->
<dubbo:protocol name="dubbo" port="20880" />
<!-- 指定需要暴露的服务 -->
<dubbo:service interface="com.gmall.service.UserService" ref="userServiceImpl" />
2、服务消费者调用
需要引入公供JAR包,然后通过服务提供者的接口来生成代理做远程通信调用,使用方试有两种:
注解方式用:
@Service
public class OrderServiceImpl implements OrderService {
@Reference //使用注解方式,拿到代理对象进行调用
UserService userService;
public List<UserAddress> initOrder(String userId) {
List<UserAddress> list = userService.getUserAddressList(userId);
for (UserAddress user : list) {
System.out.println(user.getUserAddress());
}
return list;
}
}
配置方式:
<!-- 应用名 -->
<dubbo:application name="gmall-order-web"></dubbo:application>
<!-- 指定注册中心地址 -->
<dubbo:registry address="zookeeper://118.24.44.169:2181" />
<!-- 生成远程服务代理,可以和本地bean一样使用demoService -->
<dubbo:reference id="userService" interface="com.gmall.service.UserService">
</dubbo:reference>
用配置方式时,注入的时候就可以用@Autowired注解,此时拿到的也是一个代理对像
注解方式如果没有在配置中写dubbo.scan.base-package,还需要使用@EnableDubbo注解启用Dubbo注解方式
3、一次完整的RPC调用流程(同步调用,异步另说)如下:
1)服务消费方(gmall-order-web)以本地调用方式调用服务;
2)gmall-order-web应用接收到调用后负责将方法、参数等组装成能够进行网络传输的消息体(代理对象来完成,并进行序列化传输);
3)gmall-order-web找到服务地址(通过注册中心找到),并将消息发送到服务端;
4)gmall-user收到消息后进行解码;
5)gmall-user根据解码结果调用本地的服务;
6)本地服务执行并将结果返回给gmall-user;
7)gmall-user将返回结果打包成消息并发送至消费方;
8)gmall-order-web接收到消息,并进行解码;
9)gmall-order-web服务消费方得到最终结果。
RPC框架的目标就是要2~8这些步骤都封装起来,这些细节对用户来说是透明的,不可见的。
猜你喜欢
- 2024-10-30 SpringCloudRPC远程调用核心原理:代理模式与RPC客户端实现类
- 2024-10-30 基于HTTP RESTFul的远程调用和基于RPC的远程调用有什么区别?
- 2024-10-30 23 | RPC框架:10万QPS下如何实现毫秒级的服务调用?
- 2024-10-30 基于HTTPRESTFul的远程调用和基于RPC的远程调用有什么区别?
- 2024-10-30 远程方法调用RMI详解,和RPC的思路很相似
- 2024-10-30 一文读懂几种远程调用的区别与联系
- 2024-10-30 架构实战面试必备:如何实现RPC调用保护
- 2024-10-30 事务的使用:不要在事务中包含任何rpc调用
- 2024-10-30 SpringBoot+RabbitMQ 实现 RPC 调用
- 2024-10-30 Java进阶:远程过程调用(RPC)及回调方法(一)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)