专业的编程技术博客社区

网站首页 > 博客文章 正文

简单介绍Dubbo消费者与提供者调用代码逻辑及完整的RPC调用流程

baijin 2024-10-30 01:29:10 博客文章 7 ℃ 0 评论

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这些步骤都封装起来,这些细节对用户来说是透明的,不可见的。


Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表