基于Dubbo实现服务的远程调用

目录

前言

RPC思想

为什么使用Dubbo

Dubbo技术框架

​编辑

调用关系流程

基础实现

A.提供统一业务Api

B.编辑服务提供者Product

[B.a 添加依赖](#B.a 添加依赖)

[B.b 添加Dubbo 配置(基于yaml配置文件)](#B.b 添加Dubbo 配置(基于yaml配置文件))

[B.c 编写并暴露服务](#B.c 编写并暴露服务)

C.编辑服务消费者

[C.a 添加依赖](#C.a 添加依赖)

[C.b 添加Dubbo配置](#C.b 添加Dubbo配置)

[C.c 引用服务](#C.c 引用服务)


前言

Dubbo是基于Java的RPC分布式服务框架,主要用于提高性能和实现透明化的RPC远程服务调用以及SOA服务治理方案。简单来说,Dubbo就是一个用于分布式场景下实现远程调用的服务框架,当然Dubbo不只这个一个功能,这只是其中之一,它的核心模块还包括集群容错和自动发现等。

RPC思想

rpc全称Remote Procedure Call ,即远程过程调用,是一种进程间的通信方式,或者说是一种思想,用于解决不同服务器键的进程调用。

上图是RPC的调用流程图,具体的过程在Dubbo框架时会再介绍。对于上图中的关键点有两个,一个是建立连接,另一个是序列化和反序列化。

为什么说这两个是关键的地方呢,这是由于在分布式服务架构中,服务的调用基于网络传递,这时数据就需要进行序列化和反序列化的操作,因此服务器的性能也就取决于我们选择的RPC框架是否能够迅速的建立连接和实现序列化、反序列化。

为什么使用Dubbo

  • Dubbo可以讲核心的业务抽离出来,作为独立的服务,形成稳定的服务中心,以实现代码的灵活复用和拓展。
  • Dubbo的配置方式对应用没有任何侵入,做到了透明化接入应用,只需要Spring加载Dubbo配置即可
  • 再分布式架构下,可以承担更大规模的流量并发

Dubbo技术框架

节点说明

|-----------|---------------------|
| 节点 | 说明 |
| Provider | 服务提供者 |
| Consumer | 服务消费者 |
| Registry | 服务注册(发现)中心 |
| Moniter | 服务监控中心(统计调用次数和调用时间) |
| Container | 服务运行容器 |

调用关系流程

1、服务容器负责启动,加载,运行服务提供者;

2、服务提供者在启动时,向注册中心注册自己提供的服务;

3、服务消费者在启动时,向注册中心订阅自己所需的服务;

4、注册中心返回服务提供者地址列表给消费者;

5、服务消费者基于负载均衡算法,从提供者地址列表中,选择一位提供者进行调用,如果调用失败,再选另一位调用。

6、服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

基础实现

A.提供统一业务Api

java 复制代码
/**
实战中,会将所有服务接口设计给一个叫做api的服务,单独维护,此处就在common服务设置*/

public interface IProductService {

Product findByPid(Integer pid);

}

B.编辑服务提供者Product

B.a 添加依赖

XML 复制代码
<!--dubbo--> 
<dependency>
  <groupId>com.alibaba.cloud</groupId> 
  <artifactId>spring-cloud-starter-dubbo</artifactId>
</dependency>

B.b 添加Dubbo 配置(基于yaml配置文件)

XML 复制代码
dubbo: 
    scan: 
        base-packages: com.apesource.service.impl # 开启包扫描
    protocols: 
        dubbo: 
            name: dubbo # 服务协议 
            port: -1 # 服务端口 使用随机端口
    registry: 
        address: spring-cloud://localhost # 注册中心

B.c 编写并暴露服务

java 复制代码
//暴露服务:注意这里使用的是dubbo提供的注解@Service,而不是Spring的
@Service 
    public class ProductServiceImpl implements ProductService {
        @Autowired 
        private ProductDao productDao; 
        @Override
        public Product findByPid(Integer pid) {
            return productDao.findById(pid);
        }
    }

C.编辑服务消费者

C.a 添加依赖

XML 复制代码
<!--dubbo--> 
<dependency> 
  <groupId>com.alibaba.cloud</groupId> 
  <artifactId>spring-cloud-starter-dubbo</artifactId> 
</dependency>

C.b 添加Dubbo配置

XML 复制代码
dubbo: 
    registry: 
        address: spring-cloud://localhost # 注册中心
    cloud: 
        subscribed-services: service-product # 订阅的提供者名称

C.c 引用服务

java 复制代码
	@RestController 
    public class OrderController {
        @Autowired 
        private OrderService orderService; 
        //引用服务 
        @Reference 
        private IProductService productService; 
        @RequestMapping("/order/prod/{pid}") 
        public Order order(@PathVariable Integer pid) { 
            System.out.println("接收到{}号商品的下单请求,接下来调用商品微服务查询此商品信息"+pid); 
            //调用商品微服务,查询商品信息
            Product product = productService.findByPid(pid); 
            //下单(创建订单) 
            Order order = new Order(); 
            order.setUid(1); 
            order.setUsername("测试用户");
            order.setPid(pid);
            order.setPname(product.getPname()); 
            order.setPprice(product.getPprice());
            order.setNumber(1);
            orderService.createOrder(order);
            System.out.println("创建订单成功,订单信息为{}"+JSON.toJSONString(order));
            return order;
        } 
    }
相关推荐
吃不胖爹1 天前
主动提交给搜索引擎,例如百度搜索资源平台、Google Search Console:验证站点、提交 sitemap,便于发现和收录
搜索引擎·百度·dubbo
0和1的搬运工3 天前
基于Java+SpringBoot+Vue+HTML5高校教师电子名片系统(源码+LW+调试文档+讲解等)/高校教师/电子名片/系统/教育科技/教育信息化/名片管理/电子身份/教师信息管理/校园信息化
spring cloud·tomcat·log4j·maven·intellij-idea·dubbo·java-consul
咸鱼2.09 天前
【java入门到放弃】Dubbo
java·开发语言·dubbo
全栈前端老曹10 天前
【前端地图】多地图平台适配方案——高德、百度、腾讯、Google Maps SDK 差异对比、封装统一地图接口
前端·javascript·百度·dubbo·wgs84·gcj-02·bd09
滴图客户服务经理11 天前
滴图开放平台 API 全评测:注册、功能、体验与选型建议
dubbo
百度智能云技术站12 天前
百度百舸 x 昆仑芯,Day0 适配小米 MiMo-V2.5-Pro 模型
dubbo
阿冰冰呀14 天前
互联网大厂Java求职面试实录:谢飞机的“水货”之路
java·mybatis·dubbo·springboot·线程池·多线程·hashmap
User_芊芊君子15 天前
破解交互系统的“不可能三角”:低延迟、高并发与低成本的端到端实现
人工智能·dubbo·生活
隔窗听雨眠16 天前
百度搜索算法逆向思考
百度·dubbo
星辰_mya17 天前
RPC 原理:Dubbo为了偷懒而存在的中间商
后端·网络协议·rpc·架构·dubbo