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

这篇具有很好参考价值的文章主要介绍了基于Dubbo实现服务的远程调用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

前言

RPC思想

为什么使用Dubbo

 Dubbo技术框架

​编辑

调用关系流程

基础实现

A.提供统一业务Api

 B.编辑服务提供者Product

B.a 添加依赖

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

B.c 编写并暴露服务

C.编辑服务消费者

C.a 添加依赖

C.b 添加Dubbo配置

C.c 引用服务


前言

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

RPC思想

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

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

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

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

为什么使用Dubbo

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

 Dubbo技术框架

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

 节点说明

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

调用关系流程

1、服务容器负责启动,加载,运行服务提供者;
2、服务提供者在启动时,向注册中心注册自己提供的服务;
3、服务消费者在启动时,向注册中心订阅自己所需的服务;
4、注册中心返回服务提供者地址列表给消费者;
5、服务消费者基于负载均衡算法,从提供者地址列表中,选择一位提供者进行调用,如果调用失败,再选另一位调用。
6、服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。文章来源地址https://www.toymoban.com/news/detail-702285.html

基础实现

A.提供统一业务Api

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

public interface IProductService {

Product findByPid(Integer pid);

}

 B.编辑服务提供者Product

B.a 添加依赖
<!--dubbo--> 
<dependency>
  <groupId>com.alibaba.cloud</groupId> 
  <artifactId>spring-cloud-starter-dubbo</artifactId>
</dependency>
B.b 添加Dubbo 配置(基于yaml配置文件)
dubbo: 
    scan: 
        base-packages: com.apesource.service.impl # 开启包扫描
    protocols: 
        dubbo: 
            name: dubbo # 服务协议 
            port: -1 # 服务端口 使用随机端口
    registry: 
        address: spring-cloud://localhost # 注册中心
B.c 编写并暴露服务
//暴露服务:注意这里使用的是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 添加依赖
<!--dubbo--> 
<dependency> 
  <groupId>com.alibaba.cloud</groupId> 
  <artifactId>spring-cloud-starter-dubbo</artifactId> 
</dependency>
C.b 添加Dubbo配置
dubbo: 
    registry: 
        address: spring-cloud://localhost # 注册中心
    cloud: 
        subscribed-services: service-product # 订阅的提供者名称
C.c 引用服务
	@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;
        } 
    }

到了这里,关于基于Dubbo实现服务的远程调用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【spring Cloud】微服务通信的三种方式RestTemplate、Feign远程调用与Dubbo的使用

    目录 一、通过RestTemplate调用微服务 二、通过Feign远程调用 三、Dubbo  分布式中的远程调用大概分为两种 RESTful接口  REST,即Representational State Transfer的缩写,如果一个架构符合REST原则,就称它为RESTful架构。 每一个URI代表一种资源; 客户端和服务器之间,传递这种资源的某种

    2024年04月11日
    浏览(35)
  • 微服务学习 | Springboot整合Dubbo+Nacos实现RPC调用

    🏷️ 个人主页 :鼠鼠我捏,要死了捏的主页  🏷️ 系列专栏 :Golang全栈-专栏 🏷️ 个人学习笔记,若有缺误,欢迎评论区指正   前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站AI学习网站。 目录 前言 快速上手

    2024年02月19日
    浏览(31)
  • Dubbo 指定调用固定ip+port dubbo调用指定服务 dubbo调用不随机 dubbo自定义调用服务 dubbo点对点通信 dubbo指定ip

    1. 在写分布式im时nami-im: 分布式im, 集群 zookeeper netty kafka nacos rpc主要为gate(长连接服务) logic (业务) lsb (负载均衡)store(存储) - Gitee.com,需要指定某一长连接服务调用,其他博客得都调不通,写的有问题。要不就是通过xml进行配置,本文主要是以代码形式,调用前 配

    2024年02月15日
    浏览(32)
  • Springboot3.X整合Dubbo3.XSpringCloudAlibaba微服务 2022.0 + Springboot3.X 集成 Dubbo实现对外调用http内部调用RPC

    近期自己新开了一套SpringCloud Alibaba微服务项目,接口使用了对外HTTP,内部RPC的设计,具体点说就是外部用户或客户端通过Nginx访问到Gateway网关再分发到各个服务,内部各个服务之间统一使用Dubbo RPC进行通信。下面是Springboot3.x集成Dubbo的分享: 1. 需要的关键依赖 2. 启动程序入

    2024年02月15日
    浏览(26)
  • Dubbo远程调用在IDEA无法打断点怎么破

     以下是如何在IDEA中在Dubbo的分布式环境中设置远程调试的步骤: 1、首先,你需要在启动提供者服务时,加入一些JVM参数以开启调试服务。这些参数应该在你的启动脚本或者命令中。以下是一个常见的示例: 这行命令开启了调试,并设置了远程调试端口为5005。你可以根据你

    2024年02月08日
    浏览(25)
  • 远程方法调用中间件Dubbo在spring项目中的使用

    作者: 逍遥Sean 简介:一个主修Java的Web网站游戏服务器后端开发者 主页:https://blog.csdn.net/Ureliable 觉得博主文章不错的话,可以三连支持一下~ 如有需要我的支持,请私信或评论留言! Dubbo是一个高性能分布式服务的Java RPC框架,它可以可以帮助实现不同应用之间的远程调用

    2024年02月10日
    浏览(31)
  • Dubbo之消费端服务RPC调用

    在消费端服务是基于接口调用Provider端提供的服务,所以在消费端并没有服务公共接口的实现类。 利用注解@DubboReference将目标接口CountryService作为CountryController类的字段属性,在解析类CountryController时获取全部字段属性并单独关注解析存在注解@DubboReference的字段属性。 通过步骤

    2024年03月12日
    浏览(36)
  • Mybatis-Plus+Nacos+Dubbo进行远程RPC调用保姆级教程

    本文通过简单的示例代码和说明,让读者能够了解Mybatis-Plus+Nacos+Dubbo进行远程RPC调用的简单使用  默认你已经看过我之前的教程了,并且拥有上个教程完成的项目, 之前的教程 https://www.cnblogs.com/leafstar/p/17638782.html 项目链接在最后   1.在bank1的pom文件中引入以下依赖   2.使用

    2024年02月12日
    浏览(22)
  • 从源码全面解析 dubbo 服务端服务调用的来龙去脉

    👏作者简介:大家好,我是爱敲代码的小黄,独角兽企业的Java开发工程师,CSDN博客专家,阿里云专家博主 📕系列专栏:Java设计模式、Spring源码系列、Netty源码系列、Kafka源码系列、JUC源码系列、duubo源码系列 🔥如果感觉博主的文章还不错的话,请👍三连支持👍一下博主哦

    2024年02月11日
    浏览(27)
  • 不满足于RPC,详解Dubbo的服务调用链路

    【收藏向】从用法到源码,一篇文章让你精通Dubbo的SPI机制 面试Dubbo ,却问我和Springcloud有什么区别? 超简单,手把手教你搭建Dubbo工程(内附源码) Dubbo最核心功能——服务暴露的配置、使用及原理 并不简单的代理,Dubbo是如何做服务引用的 经过前面一系列的铺垫,今天终

    2024年02月16日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包