dubbo 接口初入门

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
EMR Serverless StarRocks,5000CU*H 48000GB*H
应用型负载均衡 ALB,每月750个小时 15LCU
简介: 笔记

最近公司开发新的一套系统,开发出来的方案会基于dubbo分布式服务框架开发的,那么什么是dubbo,身为测试的我,第一眼看到这个,我得去了解了解dubbo是啥玩意,为开展的测试工作做准备,提前先学 dubbo的相关知识

 

1.什么是dubbo


 

   Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。简单的说,dubbo就是个服务框架,如果没有分布式的需求,其实是不需要用的,只有在分布式的时候,才有dubbo这样的分布式服务框架的需求,并且本质上是个服务调用的东东

    其核心部分包含:

1. 远程通讯: 提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换方式。

2. 集群容错: 提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持。

3. 自动发现: 基于注册中心目录服务,使服务消费方能动态的查找服务提供方,使地址透明,使服务提供方可以平滑增加或减少机器。

 Dubbo本身支持多种远程调用方式,例如Dubbo RPC(二进制序列化 + tcp协议)、http invoker(二进制序列化 + http协议)、hessian(二进制序列化 + http协议)、WebServices (文本序列化 + http协议)等。


 2. Dubbo能做什么?


1.透明化的远程方法调用,就像调用本地方法一样调用远程方法,只需简单配置,没有任何API侵入。      

2.软负载均衡及容错机制,可在内网替代F5等硬件负载均衡器,降低成本,减少单点。

3. 服务自动注册与发现,不再需要写死服务提供方地址,注册中心基于接口名查询服务提供者的IP地址,并且能够平滑添加或删除服务提供者。


 

3. dubbo的架构


70.png

 

 

 

Provider

暴露服务方称之为“服务提供者”。

 

Consumer

调用远程服务方称之为“服务消费者”。

 

Registry

服务注册与发现的中心目录服务称之为“服务注册中心”。

 

Monitor

统计服务的调用次数和调用时间的日志服务称之为“服务监控中心”。

 

         

调用关系说明:


  0 服务容器负责启动,加载,运行服务提供者。

  1. 服务提供者在启动时,向注册中心注册自己提供的服务。

  2. 服务消费者在启动时,向注册中心订阅自己所需的服务。

  3. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。

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

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

 

以上均是dubbo框架的一些理论知识、那么了解了基础的知识,我们怎么来测试dubbo提供的接口呢。

遇到这个问题我也会咨询一些前辈,有人说java编写代码可以测试,但是需要的依赖多,有些人说基于python也是可以调用的,那么也是需要第三库来支持的,

我们可以去下载对应的python库,有的版本不支持python3 你可以下载下来源码,对源码中的一些代码格式调整到python3支持的格式就好。

我这里才用的是dubbo_telnet下载安装后我们先测试下,看代码是否能够正常运行。

我们拿来了官方的例子。

import dubbo_telnet
Host = '192.168.1.203' # Doubble服务器IP
Port = 28008 # Doubble服务端口
# 初始化dubbo对象
conn = dubbo_telnet.connect(Host, Port)
# 设置telnet连接超时时间
conn.set_connect_timeout(10)
# 设置dubbo服务返回响应的编码
conn.set_encoding('gbk')
interface = 'com.zrj.pay.trade.api.QueryTradeService'#接口
method = 'tradeDetailQuery'#方法
param = '{"message": "HelloWorld"}'#参数
print (conn.invoke(interface, method, param))
command = 'invoke com.zrj.pay.trade.api.QueryTradeService.tradeDetailQuery({"message":"HelloWorld"})'
print (conn.do(command)) #打印接口返回结果

运行后,

90.png

 

这样我们的代码是没有问题的,由于我本地没有dubbo的服务,所以这里是返回None。

对于上述代码,我做了进一步的优化。

import dubbo_telnet
def coondoubble_data(Host,Port,interface,method,param):
    try:
        # 初始化dubbo对象
        conn = dubbo_telnet.connect(Host, Port)
        # 设置telnet连接超时时间
        conn.set_connect_timeout(10)
        # 设置dubbo服务返回响应的编码
        conn.set_encoding('gbk')
        conn.invoke(interface, method, param)
        command = 'invoke %s.%s(%s)'%(interface,method,param)
        return  conn.do(command)
    except:
        return  Exception
if __name__=="__main__":
    Host = '192.168.1.203'  # Doubble服务器IP
    Port = 28008  # Doubble服务端口
    interface = 'com.zrj.pay.trade.api.QueryTradeService'  # 接口
    method = 'tradeDetailQuery'  # 方法
    param = '{"message": "HelloWorld"}'  # 参数
    data=coondoubble_data(Host,Port,interface,method,param)
    print(data)

可见,我们用python是能够调用出来我们的dubbo服务的,那么接下来就是根据现有的dubbo接口进行测试了,由于现在研发还没有进行一系列的开发,所以我打算先自己去尝试的按照网上例子写一个dubbo的例子,用作自己的测试。

 

dubbo的接口测试其实也不是那么难,只要我们肯下功夫,我们一定能够做成功的。dubbo接口。开始学起来。


相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
1月前
|
Dubbo Java 应用服务中间件
Dubbo学习圣经:从入门到精通 Dubbo3.0 + SpringCloud Alibaba 微服务基础框架
尼恩团队的15大技术圣经,旨在帮助开发者系统化、体系化地掌握核心技术,提升技术实力,从而在面试和工作中脱颖而出。本文介绍了如何使用Dubbo3.0与Spring Cloud Gateway进行整合,解决传统Dubbo架构缺乏HTTP入口的问题,实现高性能的微服务网关。
|
6月前
|
负载均衡 监控 Dubbo
秒懂Dubbo接口(原理篇)
【4月更文挑战第25天】秒懂Dubbo接口(原理篇)
227 3
秒懂Dubbo接口(原理篇)
|
2月前
|
Dubbo Java 应用服务中间件
分布式-dubbo的入门
分布式-dubbo的入门
|
5月前
|
Dubbo Java 应用服务中间件
Spring Boot 调用 Dubbo 接口与编写 Dubbo 接口实战
Spring Boot 调用 Dubbo 接口与编写 Dubbo 接口实战
626 1
|
负载均衡 Dubbo NoSQL
Dubbo分布式服务接口的幂等性防止重复扣款
Dubbo分布式服务接口的幂等性防止重复扣款
210 0
|
6月前
|
设计模式 JSON Dubbo
超越接口:探索Dubbo的泛化调用机制
超越接口:探索Dubbo的泛化调用机制
370 0
|
Dubbo Java 应用服务中间件
springboot + dubbo + zookeeper入门到实战超级详解
springboot + dubbo + zookeeper入门到实战超级详解
219 0
|
Dubbo Java 应用服务中间件
Netty入门到超神系列-手撸简单版RPC框架(仿Dubbo)
原理还是比较简单 : 代理 + 线程池 + Netty 下面做一些解释: 首先需要定义一个统一的API接口,例:UserApi , 服务端(provider)需要实现这个接口,提供相应的方法UserApiImpl#save,客户端通过远程来调用该接口。 然后需要约定一个协议,服务器如何才能识别到客户端要调用哪个接口?:我这里用 “接口权限定名#方法名#参数” ,的方式来,因为是一个简单版本的RPC。服务端解析该内容就能匹配对应的接口的实现类,然后调用该方法。并把方法的返回值通过Netty写回给客户端 使用的编解码器都是比价简单的String的编解码器
169 0
|
6月前
|
监控 负载均衡 Dubbo
分布式架构与Dubbo基础入门与实践
分布式架构与Dubbo基础入门与实践
64 1
|
6月前
|
Dubbo Java 应用服务中间件
分布式应用简单入门及SpringBoot整合Dubbo+Zookeeper
分布式应用简单入门及SpringBoot整合Dubbo+Zookeeper
177 1