Python使用Telnet远程调用Dubbo接口
Python使用Telnet远程调用Dubbo接口
最近公司项目使用了Python作CMS系统,但是数据分析和一些基础数据提供等需要用到Java来做,所以就是一个后台项目分成Java和Python来做,有一些数据就需要从Python端查出来再提供给Java使用,Python使用的是django,Java是Springboot,Python调Java可以使用Telnet调用Java的dubbo接口,Java调用Python用Spring提供的RestTemplate(详情另一篇文章 )
首先安装python环境乱七八糟的就不说了
直接安装我们需要的包
pip install dubbo_telnet 如果下载不下的童鞋可以去github直接下载然后手动解压/安装 链接
(这里使用的是python2.7 如果用3.6会遇到一些问题)
然后按照example 抄一份改参数即可
# -*- coding: utf-8 -*-
import dubbo_telnet
if __name__ == '__main__':
Host = '127.0.0.1' # Doubble服务器IP
Port = 20883 # Doubble服务端口
# 初始化dubbo对象
conn = dubbo_telnet.connect(Host, Port)
# 设置telnet连接超时时间
conn.set_connect_timeout(500)
# 设置dubbo服务返回响应的编码
conn.set_encoding('utf-8')
command = 'invoke com.hqjl.common.service.xxxxxxxxxx.method(param)'
print (conn.do(command))
说一下最后那里
command = ‘invoke’ + dubbo 服务名 + 方法名 (参数)
访问类 可以通过dubbo-admin来看,详情见( )
方法名不多说了
这个参数 我要说一下 如果直接调用服务端java 很多教程都是传递的json参数 而dubbo端接收的可能不是json
所以如果不是 请直接传一个list参数即可 換一種方法说就是不要写参数名 直接写参数
也就是 command = ‘invoke’ + dubbo 服务名 + 方法名 (‘1165’)
————————分割线————————
2019-10-11
今天和自家技术老大 讨论了这个事情,发现并不是那么简单
我理解其实这就是python模拟了cmd的telnet命令
在java的dubbo中序列化等等协议是有一些规定的。
并不是所有的dubbo接口都能通过这个方法调用成功
所以还是尽量不要用python去调用dubbo 或者再找一下其他方法