首页 > 编程语言 >基于java 实现rpc服务调用

基于java 实现rpc服务调用

时间:2022-10-31 15:59:00浏览次数:37  
标签:调用 java 训练 国奥队 Object rpc client org import

package com.thtf.zwdsj.fangjia.rpc;

import org.apache.ws.commons.util.NamespaceContextImpl;
import org.apache.xmlrpc.common.TypeFactoryImpl;
import org.apache.xmlrpc.common.XmlRpcController;
import org.apache.xmlrpc.common.XmlRpcStreamConfig;
import org.apache.xmlrpc.parser.NullParser;
import org.apache.xmlrpc.parser.TypeParser;
import org.apache.xmlrpc.serializer.NullSerializer;

/**
 * @PROJECT_NAME: fuwuyejiage
 * @DESCRIPTION: Python 服务调用服务
 * @USER: 一个字【赣】
 * @COMPANY: 华路时代
 */
public class MyTypeFactory extends TypeFactoryImpl{

    public MyTypeFactory(XmlRpcController pController) {
        super(pController);
    }

    @Override
    public TypeParser getParser(XmlRpcStreamConfig pConfig, NamespaceContextImpl pContext, String pURI,
            String pLocalName) {
        if("".equals(pURI) && NullSerializer.NIL_TAG.equals(pLocalName)){
            return new NullParser();
        }else{
            return super.getParser(pConfig, pContext, pURI, pLocalName);
        }
    }
}
package com.thtf.zwdsj.fangjia.rpc;


//import com.thtf.framework.core.util.JSONUtil;
//import com.thtf.monitor.common.domain.model.ResultDTO;
import cn.hutool.json.JSONUtil;
import com.ruoyi.common.core.domain.R;
import org.apache.xmlrpc.XmlRpcException;
import org.apache.xmlrpc.client.XmlRpcClient;
import org.apache.xmlrpc.client.XmlRpcClientConfigImpl;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.stereotype.Component;

import java.net.MalformedURLException;
import java.net.URL;

/**
 * @PROJECT_NAME: fuwuyejiage
 * @DESCRIPTION: Python 服务调用服务
 * @USER: 一个字【赣】
 * @COMPANY: 华路时代
 */
@Component
@RefreshScope
public class PythonRpcCallService implements InitializingBean{

    private static final Logger log = LoggerFactory.getLogger(PythonRpcCallService.class);

    @Value("${PythonService.hostName}")
    private   String hostName;

    @Value("${PythonService.port}")
    private  String port;

    //定义使用rpc的client
    static XmlRpcClient client = new XmlRpcClient();

    public String getHostName() {
        return hostName;
    }

    public void setHostName(String hostName) {
        this.hostName = hostName;
    }

    public String getPort() {
        return port;
    }

    public void setPort(String port) {
        this.port = port;
    }

    private static Logger logger = LoggerFactory.getLogger(PythonRpcCallService.class);

    @Override
    public void afterPropertiesSet() throws Exception {
        initXmlRpcClient();
    }
    public void initXmlRpcClient() {
        try {
            log.info("==============hostName:{}===========",hostName);
            log.info("==============port:{}===========",port);
            XmlRpcClientConfigImpl config = new XmlRpcClientConfigImpl();
            config.setServerURL(new URL("HTTP://"+hostName+":"+port+"/RPC2"));
            //开启扩展
            config.setEnabledForExtensions(true);
            //设置配置
            client.setConfig(config);
            //设置自定义类型工程,对nil类型数据进行转换。
            client.setTypeFactory(new MyTypeFactory(client));
            log.info("==============python-rpc服务连接===========");
        } catch (MalformedURLException e) {
            e.printStackTrace();
            log.info("==============python-rpc服务连接失败===========");
        }
    }

    /**
     * 调用python服务的接口,无返回值
     * @param pythonServerName
     * @param args
     */
    public  void callPython(String pythonServerName,Object... args){
        try {
            System.out.println("执行地址:"+hostName+":"+port);
            client.execute(pythonServerName,args);
        } catch (XmlRpcException e) {
            e.printStackTrace();
        }
    }

    /**
     * 调用python服务的接口,有返回值。
     * @param pythonServerName
     * @param args
     * @return
     */
    public R callPython4Return(String pythonServerName, Object... args){
        R<Object> resultDTO = new R<>();
        try {
            logger.info("执行地址:"+hostName+":"+port);
            logger.info("执行算法:"+pythonServerName+" 开始");
            logger.info("算法参数:"+ JSONUtil.toJsonStr(args));
            Object res =  client.execute(pythonServerName,args);
            logger.info("算法返回值:"+ JSONUtil.toJsonStr(res));
            logger.info("执行算法:"+pythonServerName+" 结束");
            resultDTO.setCode(200);
            resultDTO.setData(res);
        } catch (Exception e) {
            e.printStackTrace();
            resultDTO.setCode(500);
            resultDTO.setMsg("算法调用参数错误");
        }
        return resultDTO;
    }


    //手动测试下
//    public static void main(String[] args) {
//        try {
//            Object res2= callPython4Return("predict",new Object[]{"马晓旭意外受伤让国奥警惕 无奈大雨格外青睐殷家军记者傅亚雨沈阳报道 来到沈阳,国奥队依然没有摆脱雨水的困扰。7月31日下午6点,国奥队的日常训练再度受到大雨的干扰,无奈之下队员们只慢跑了25分钟就草草收场。31日上午10点,国奥队在奥体中心外场训练的时候,天就是阴沉沉的,气象预报显示当天下午沈阳就有大雨,但幸好队伍上午的训练并没有受到任何干扰。下午6点,当球队抵达训练场时,大雨已经下了几个小时,而且丝毫没有停下来的意思。抱着试一试的态度,球队开始了当天下午的例行训练,25分钟过去了,天气没有任何转好的迹象,为了保护球员们,国奥队决定中止当天的训练,全队立即返回酒店。在雨中训练对足球队来说并不是什么稀罕事,但在奥运会即将开始之前,全队变得“娇贵”了。在沈阳最后一周的训练,国奥队首先要保证现有的球员不再出现意外的伤病情况以免影响正式比赛,因此这一阶段控制训练受伤、控制感冒等疾病的出现被队伍放在了相当重要的位置。而抵达沈阳之后,中后卫冯萧霆就一直没有训练,冯萧霆是7月27日在长春患上了感冒,因此也没有参加29日跟塞尔维亚的热身赛。队伍介绍说,冯萧霆并没有出现发烧症状,但为了安全起见,这两天还是让他静养休息,等感冒彻底好了之后再恢复训练。由于有了冯萧霆这个例子,因此国奥队对雨中训练就显得特别谨慎,主要是担心球员们受凉而引发感冒,造成非战斗减员。而女足队员马晓旭在热身赛中受伤导致无缘奥运的前科,也让在沈阳的国奥队现在格外警惕,“训练中不断嘱咐队员们要注意动作,我们可不能再出这样的事情了。”一位工作人员表示。从长春到沈阳,雨水一路伴随着国奥队,“也邪了,我们走到哪儿雨就下到哪儿,在长春几次训练都被大雨给搅和了,没想到来沈阳又碰到这种事情。”一位国奥球员也对雨水的“青睐”有些不解。"});
//            System.out.println(res2);
//
//            //test
//            Object a = client.execute("testa",new Object[]{});
//            System.out.println(a);
//
//            //获取目标
//            Object b = client.execute("getTarget_indicator",new Object[]{"2015年实现人均生产总值翻番","2015","人均生产总值"});
//            System.out.println(b);
//
//            //获取相似文档
//            //Object c = client.execute("docAlike_predict",new Object[]{"工作,情况"});
//            //System.out.println(c);
//
//            //相似文档trian
//            Object c =client.execute("docAlike_predict",new Object[]{"马晓旭意外受伤让国奥警惕 无奈大雨格外青睐殷家军记者傅亚雨沈阳报道 来到沈阳,国奥队依然没有摆脱雨水的困扰。7月31日下午6点,国奥队的日常训练再度受到大雨的干扰,无奈之下队员们只慢跑了25分钟就草草收场。31日上午10点,国奥队在奥体中心外场训练的时候,天就是阴沉沉的,气象预报显示当天下午沈阳就有大雨,但幸好队伍上午的训练并没有受到任何干扰。下午6点,当球队抵达训练场时,大雨已经下了几个小时,而且丝毫没有停下来的意思。抱着试一试的态度,球队开始了当天下午的例行训练,25分钟过去了,天气没有任何转好的迹象,为了保护球员们,国奥队决定中止当天的训练,全队立即返回酒店。在雨中训练对足球队来说并不是什么稀罕事,但在奥运会即将开始之前,全队变得“娇贵”了。在沈阳最后一周的训练,国奥队首先要保证现有的球员不再出现意外的伤病情况以免影响正式比赛,因此这一阶段控制训练受伤、控制感冒等疾病的出现被队伍放在了相当重要的位置。而抵达沈阳之后,中后卫冯萧霆就一直没有训练,冯萧霆是7月27日在长春患上了感冒,因此也没有参加29日跟塞尔维亚的热身赛。队伍介绍说,冯萧霆并没有出现发烧症状,但为了安全起见,这两天还是让他静养休息,等感冒彻底好了之后再恢复训练。由于有了冯萧霆这个例子,因此国奥队对雨中训练就显得特别谨慎,主要是担心球员们受凉而引发感冒,造成非战斗减员。而女足队员马晓旭在热身赛中受伤导致无缘奥运的前科,也让在沈阳的国奥队现在格外警惕,“训练中不断嘱咐队员们要注意动作,我们可不能再出这样的事情了。”一位工作人员表示。从长春到沈阳,雨水一路伴随着国奥队,“也邪了,我们走到哪儿雨就下到哪儿,在长春几次训练都被大雨给搅和了,没想到来沈阳又碰到这种事情。”一位国奥球员也对雨水的“青睐”有些不解。"});
//            System.out.println(c);
//
//        } catch (XmlRpcException e) {
//            e.printStackTrace();
//        }
//    }

}
        <dependency>
            <groupId>org.apache.xmlrpc</groupId>
            <artifactId>xmlrpc-client</artifactId>
            <version>3.1.3</version>
        </dependency>
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.7.19</version>
        </dependency>    

 

标签:调用,java,训练,国奥队,Object,rpc,client,org,import
From: https://www.cnblogs.com/chenTo/p/16844579.html

相关文章

  • java进阶篇——Stream流编程
    Stream流函数式接口1.消费型接口——Consumer@FunctionalInterfacepublicinterfaceConsumer<T>{/***对给定的参数执行此操作。**@param......
  • Java启动DataX数据同步,如何终止/停止/中断同步数据任务
    Java启动DataX数据同步,如何终止/停止/中断同步数据任务: 1、找到datax的core模块找到类:ProcessInnerScheduler.java,将taskGroupContainerExecutorService对象存起来,......
  • 大一学生《Web编程基础》期末网页制作 HTML+CSS+JavaScript 网页设计实例 企业网站制
    HTML实例网页代码,本实例适合于初学HTML的同学。该实例里面有设置了css的样式设置,有div的样式格局,这个实例比较全面,有助于同学的学习,本文将介绍如何通过从头开始设计个人......
  • Java Web开发流程的学习
    一开始我只是想学习一下WEB界面的JAVA变成,看了这个文章:https://blog.csdn.net/java_0000/article/details/124480210要创建Web应用程序,告诉大家需要以下Java开发工具:I......
  • JavaScript-JQuery-3
    JQuery​​1.首先可以放包,也可以使用网络链接​​​​2.获取id标签使用$("#ID名")​​​​3.获取class的标签$(".Class名")​​​​4.直接获取标签$("标签名")​​​​5.组合......
  • java-Swing常用组件-1
    文章目录​​Swing常用组件​​Swing常用组件......
  • java反序列化cc_link_one2
    CC-LINK-one_second前言这条链子其实是上一条链子的另一种走法,在调用危险函数哪里是没有什么变化的整体链子还是尾部没有变化嘛还是InvokerTransformer的transform方法......
  • JavaWeb期中考试-2019年版(三)
    本次内容为2019年期中考试的数据添加界面add.jsp和数据接受界面addq.jsp的代码分享首先是add.jsp1<%@pagelanguage="java"contentType="text/html;charset=UTF-8"......
  • JavaWeb期中考试-2019年版(一)
    第七次全国人口普查登记(20分)1、项目需求:开展第七次全国人口普查,将为编制“十四五”规划提供重要信息支持;推动实现人口与经济社会、资源环境协调发展,为深化供给侧结构性改......
  • gRPC - Debug - Channel ManagedChannelImpl was not shut down properly
    问题描述生产代码报错:2022-10-31T09:06:46,530[portRiskService-1002-2950@168-63-70-238:8]ERRORio.grpc.internal.ManagedChannelOrphanWrapper-*~*~*~Channel......