python使用dubbo对接Java_Python 调用 Hprose接口、Dubbo接口、Java方法

本文介绍了如何使用Python通过Hprose和Dubbo接口调用Java服务,包括创建HTTP客户端、设置连接头、调用Java方法等步骤,详细展示了MyHprose和MyDubbo类的实现。
摘要由CSDN通过智能技术生成

#!/usr/bin/env python

# -*- coding:utf-8 -*-

# *************************************

# @Time : 2019/7/1

# @Author : Zhang Fan

# @Desc : Library

# @File : MyTools.py

# @Update : 2019/8/23

# *************************************

import telnetlib

import hprose

import jpype

import json

import os

class MyHprose(object):

"""

===================================================================

===================== MyHprose =======================

===================================================================

"""

def __init__(self):

self.client = None

self.base_url = None

def create_http_client(self, address, url):

"""

创建HTTP客户端连接

"""

self.base_url = 'http://' + address + url

print('Creating Session : %s' % self.base_url)

self.client = hprose.HproseHttpClient(self.base_url)

def set_header(self, key, value):

"""

设置连接头

"""

print('Set Header : { "%s": "%s" }' % (key, value))

self.client.setHeader(key, value)

def set_parameter(self, *args):

"""

设置参数值

"""

arg_list = list()

for arg in args:

if isinstance(arg, str):

try:

arg = eval(arg)

except Exception as e:

logger.error(e)

arg_list.append(arg)

print('Set Parameter : %s' % str(arg_list))

return arg_list

def invoke_method(self, method, args):

"""

调用方法

"""

result = {

'type': None,

'msg': None,

'value': None

}

print('Invoke Method : method={0}, args={1}'.format(method, args))

ret = self.client.invoke(method, args)

result['type'] = ret.types

result['msg'] = ret.msg

result['value'] = ret.value

return json.dumps(result, ensure_ascii=False)

class MyJpype(object):

"""

===================================================================

===================== MyJpype ========================

===================================================================

"""

def __init__(self):

pass

def start_jvm(self, jvmpath, jarpath):

"""

开启java虚拟机.

"""

print('Executing : Start JVM | java -ea -Djava.class.path=JedisSerialize.jar')

jarpath = os.path.join(os.path.abspath(jarpath), "JedisSerialize.jar")

jpype.startJVM(jvmpath, "-ea", "-Djava.class.path=%s" % jarpath, convertStrings=False)

def save_token_jvm(self, db, host, port, auth):

"""

调用java保存token到内存库.

"""

JDClass = jpype.JClass("com.util.SearchRedis")

jd = JDClass()

jd.saveToken(int(db), str(host), int(port), str(auth))

def get_redis_jvm(self, key, db, host, port, auth):

"""

调用java查询String类型内存库.

"""

print('Executing : Query Key[%s] From Select[%s]' % (key, db))

JDClass = jpype.JClass("com.util.SearchRedis")

jd = JDClass()

result = jd.getbit(str(key), int(db), str(host), int(port), str(auth))

try:

return eval(str(result))

except:

return json.loads(str(result))

def get_hash_redis_jvm(self, key, db, host, port, auth):

"""

调用java查询Hash类型内存库.

"""

print('Executing : Query Key[%s] From Select[%s]' % (key, db))

JDClass = jpype.JClass("com.util.SearchRedis")

jd = JDClass()

result = jd.gethashbit(str(key), int(db), str(host), int(port), str(auth))

try:

return eval(str(result))

except:

return json.loads(str(result))

def shutdown_jvm(self):

"""

关闭java虚拟机.

"""

print('Executing : Shutdown JVM')

jpype.shutdownJVM()

class MyDubbo(telnetlib.Telnet):

"""

===================================================================

===================== MyDubbo =========================

===================================================================

"""

def __init__(self, host=None, port=0):

# super().__init__(host, port)

super(MyDubbo, self).__init__(host, port)

self.write(b"\n")

def command(self, flag, str_=""):

data = self.read_until(flag.encode())

self.write(str_.encode() + b"\n")

return data

def invoke(self, service_name, method_name, arg):

command_str = "invoke {0}.{1}({2})".format(service_name, method_name, arg)

print('dubbo>:%s' % command_str)

self.command('dubbo>', command_str)

data = self.command('dubbo>', "\n")

new_data = data.decode('utf-8', errors='ignore').split('\n')[0].strip()

return json.loads(new_data)

if __name__ == '__main__':

print('This is test.')

mh = MyHprose()

mj = MyJpype()

md = MyDubbo()

用Python调用华为云API接口发短信

[摘要] 用Python调用华为云API接口实现发短信,当然能给调用发短信接口前提条件是通过企业实名认证,而且有一个通过审核的短信签名,话不多说,showcode #!/usr/bin/python3 ...

在windows下用python调用darknet的yolo接口

0,目标 本人计算机环境:windows7 64位,安装了vs2015专业版,python3.5.2,cygwin,opencv3.3,无gpu 希望实现用python调用yolo函数,实现物体检测. ...

Unity调用Android Studio中的Java方法

1. 新建Unity项目: 2. Android Studio中新建EmptyActivity: 3. 新建安卓项目时记住最小版本号: 4. 将左侧项目文件浏览面板切换到Project项下,在本项根节 ...

简单实现Python调用有道API接口(最新的)

# ''' # Created on 2018-5-26 # # @author: yaoshuangqi # ''' import urllib.request import urllib.pars ...

Python 调用 C# dll库最简方法

1.为什么要跨平台编程?双平台编程或多平台编程,只是为提供更好开发更兼容的解决方案的一种手段,编程时服务于产品和客户的,也是因地制宜. 先安装python所需的库clr ,我这里已经安装了,可以去对应 ...

Python——调用shell命令的三种方法

1.用os.system(cmd)   不过取不了返回值 2.用os.popen(cmd)   要得到命令的输出内容,只需再调用下read()或readlines()等 如a=os.popen(cmd ...

arcgis python 调用工具两种两种方法

arcpy.Select_analysis("p","kk") arcpy.analysis.Select("p","kk1&qu ...

python调用不同目录中类的终极方法

1.在需要导入别的类包中加入这两行代码 BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))sys.path.a ...

Python调用C/C++动态链接库的方法详解

Python调用C/C++动态链接库的方法详解 投稿:shichen2014 这篇文章主要介绍了Python调用C/C++动态链接库的方法,需要的朋友可以参考下 本文以实例讲解了Python调用C/C ...

随机推荐

c语言基础数据类型及命名规范

1. 常量是程序运行期间不能被改变的量; 变量代表一个存储区域,存储区域内存储的内容就是变量的值, 变量的值可以在程序运行期间改变  (变量就像一个杯子, 用来存放水, 杯子里的水即变量的值是可以改变 ...

MySQL 及 SQL 注入

如果您通过网页获取用户输入的数据并将其插入一个MySQL数据库,那么就有可能发生SQL注入安全的问题. 本章节将为大家介绍如何防止SQL注入,并通过脚本来过滤SQL中注入的字符. 所谓SQL注入,就是 ...

qt里标识操作系统的宏

qt文件里的 windows的宏是Q_WS_WIN32/*   The window system, must be one of: (Q_WS_x) MACX     - Mac OS X      ...

优雅的使用sublime写lua~ sublime lua相关必装插件推荐~~

缘起 lua脚本语言虽好,代码写得飞快,可是写错了调试起来却很困难,lua使用者经常容易犯得一个错误是--写错变量名了,if end 嵌套太多没匹配~,多打了一个逗号, 假设定义了一个变量 local ...

bootstrap学习笔记之导航条基础

导航条基础 导航条(navbar)和上一节介绍的导航(nav),就相差一个字,多了一个"条"字.其实在Bootstrap框架中他们还是明显的区别.在导航条(navbar)中有一个背 ...

chmod命令-权限

---··[转] hmod命令:改变文件权限.         一:符号模式:     命令格式:chmod [who] operator [permission] filename who包含的选项 ...

机器学习英雄访谈录之 Kaggle Kernels 专家:Aakash Nain

目录 机器学习英雄访谈录之 Kaggle Kernels 专家:Aakash Nain 正文 对我的启发 机器学习英雄访谈录之 Kaggle Kernels 专家:Aakash Nain Sanyam ...

解析XML异常

包含库 #include 再修改.pro文件 将 QT += core gui 后面添加 xml —> QT += core gui xml

Knockout.js 数据验证之插件版和无插件版

本文我们将介绍使用 Knockout.js 实现一些基本的数据验证.就如我们在标题里提到的,我们会使用两种方法来创建数据验证方法. 使用自定义方法,不需要任何插件 最简单的方法是使用已有的插件 如果你 ...

PHP深浅拷贝

举个栗子: <?php class Example1 { public $name; public function __construct($name) { $this->name = ...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值