Node调用Java的示例代码


Posted in Javascript onSeptember 20, 2017

Java 端作为服务提供者,基于Dubbo 实现服务并通过 Dubbo Hessian 扩展暴露服务;Node 端作为服务消费者,通过node-hessian 调用 Java 端的服务。

Java 端

服务接口

package com.yuanxin.paas.ssb;
 
public interface TestService {
 
  /**
   * 测试:无参,无返回值。
   */
  void test();
   
  /**
   * 测试:原生类型参数与返回值。
   * 
   * @param i
   * @return 
   */
  String test0(int i);
   
  /**
   * 测试:无参,自定义类型返回值。
   * 
   * @return 
   */
  Result test1();
   
  /**
   * 测试:自定义类型参数,无返回值。
   * 
   * @param arg 
   */
  void test2(Arg arg);
   
  /**
   * 测试:自定义参数,自定义返回值。
   * 
   * @param arg
   * @return 
   */
  Result test3(final Arg arg);
}

自定义参数类

package com.yuanxin.paas.ssb;
 
import java.io.Serializable;
 
public class Arg implements Serializable {
 
  private int i;
 
  public int getI() {
    return i;
  }
 
  public void setI(int i) {
    this.i = i;
  }
 
}

自定义返回值类

package com.yuanxin.paas.ssb;
 
import java.io.Serializable;
 
public class Result implements Serializable {
 
  private int i;
 
  private String string;
 
  public int getI() {
    return i;
  }
 
  public void setI(int i) {
    this.i = i;
  }
 
  public String getString() {
    return string;
  }
 
  public void setString(String string) {
    this.string = string;
  }
 
}

Dubbo 配置略。

Node 端

node-hessian

安装 node-hessian:

npm install hessian-proxy

调用服务接口

var Proxy = require('hessian-proxy').Proxy;
 
var proxy = new Proxy('http://127.0.0.1:9098/test-provider/provider/com.yuanxin.paas.ssb.TestService', '', '', proxy);
 
proxy.invoke('test', null, function (err, reply) {
  console.log('test: ' + reply);
});
 
proxy.invoke('test0', [25], function (err, reply) {
  console.log('test0: ' + JSON.stringify(reply));
})
 
proxy.invoke('test1', null, function (err, reply) {
  if (err) {
    console.log('test1: ' + err);
  }
 
  console.log('test1: ' + JSON.stringify(reply));
})
 
var argForTest2 = {
  i: 2
};
 
argForTest2.__type__ = 'com.yuanxin.paas.ssb.Arg';
 
proxy.invoke('test2', [argForTest2], function (err, reply) {
  if (err) {
    console.log('test2: ' + err);
  }
 
  console.log('test2: ' + JSON.stringify(reply));
})
 
 
var argForTest3 = {
  i: 3
};
 
argForTest3.__type__ = 'com.yuanxin.paas.ssb.Arg';
 
proxy.invoke('test3', [argForTest3], function (err, reply) {
  if (err) {
    console.log('test3: ' + err);
  }
 
  console.log('test3: ' + JSON.stringify(reply));
})

运行结果

Java 端

Node调用Java的示例代码

Node 端

Node调用Java的示例代码

总结

Dubbo 非常赞,提供了对 Hessian 原生协议的支持;Node 调用起来也非常简单,不过还是有几个点需要注意一下:

  • 接口方法不能重载(接口里的方法必须使用不同的方法名)
  • 自定义类型的命名空间服务端与消费端要一致(com.yuanxin.paas.ssb.Arg)
  • 服务端自定义类型需要实现序列化接口(java.io.Serializable)
  • 尽量使用简单的自定义类型结构(避免嵌套)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript 硬盘序列号+其它硬件信息
Dec 23 Javascript
js form 验证函数 当前比较流行的错误提示
Jun 23 Javascript
JS实现拖动示例代码
Nov 01 Javascript
JavaScript实现向setTimeout执行代码传递参数的方法
Apr 16 Javascript
JavaScript中用getDate()方法返回指定日期的教程
Jun 09 Javascript
深入浅析JSON.parse()、JSON.stringify()和eval()的作用详解
Apr 03 Javascript
JS重载实现方法分析
Dec 16 Javascript
javascript自执行函数
Feb 10 Javascript
浅谈React中组件间抽象
Jan 27 Javascript
vue scroller返回页面记住滚动位置的实例代码
Jan 29 Javascript
OpenLayers3加载常用控件使用方法详解
Sep 25 Javascript
原生JS实现音乐播放器
Jan 26 Javascript
浅谈react前后端同构渲染
Sep 20 #Javascript
微信页面弹出键盘后iframe内容变空白的解决方案
Sep 20 #Javascript
微信小程序 页面跳转事件绑定的实例详解
Sep 20 #Javascript
微信小程序 数据绑定及运算的简单实例
Sep 20 #Javascript
Angularjs使用过滤器完成排序功能
Sep 20 #Javascript
微信小程序 swiper组件构建轮播图的实例
Sep 20 #Javascript
node+koa实现数据mock接口的方法
Sep 20 #Javascript
You might like
PHP安全下载文件的方法
2016/04/07 PHP
php 中奖概率算法实现代码
2017/01/25 PHP
thinkphp5 migrate数据库迁移工具
2018/02/20 PHP
filemanage功能中用到的common.js
2007/04/08 Javascript
jQuery 使用手册(三)
2009/09/23 Javascript
jquery.jstree 增加节点的双击事件代码
2010/07/27 Javascript
基于Jquery实现表格动态分页实现代码
2011/06/21 Javascript
JS获得URL超链接的参数值实例代码
2013/06/21 Javascript
JS合并数组的几种方法及优劣比较
2014/09/19 Javascript
JS显示表格内指定行html代码的方法
2015/03/31 Javascript
Jquery 分页插件之Jquery Pagination
2015/08/25 Javascript
基于ajax与msmq技术的消息推送功能实现代码
2016/12/26 Javascript
浅谈gulp创建完整的项目流程
2017/12/20 Javascript
对Vue2 自定义全局指令Vue.directive和指令的生命周期介绍
2018/08/30 Javascript
解决vue+webpack项目接口跨域出现的问题
2020/08/10 Javascript
python调用cmd命令行制作刷博器
2014/01/13 Python
Python实现简单拆分PDF文件的方法
2015/07/30 Python
对python实现模板生成脚本的方法详解
2019/01/30 Python
基于Python第三方插件实现西游记章节标注汉语拼音的方法
2020/05/22 Python
详细分析Python collections工具库
2020/07/16 Python
Python开发入门——迭代的基本使用
2020/09/03 Python
如何利用Python动态模拟太阳系运转
2020/09/04 Python
python如何实现图片压缩
2020/09/11 Python
python 实现批量图片识别并翻译
2020/11/02 Python
Flask处理Web表单的实现方法
2021/01/31 Python
蹦床仓库:Trampoline Warehouse
2018/12/06 全球购物
Cocopanda波兰:购买化妆品、护肤品、护发和香水
2020/05/25 全球购物
在数据文件自动增长时,自动增长是否会阻塞对文件的更新
2014/05/01 面试题
如何用Java实现列出某个目录下的所有子目录
2015/07/20 面试题
大专生自我鉴定范文
2013/10/01 职场文书
高中自我评价范文
2014/01/27 职场文书
个人自我评价范文
2014/02/05 职场文书
医德医风演讲稿
2014/05/20 职场文书
2015年中秋节演讲稿
2015/03/20 职场文书
活动新闻稿范文
2015/07/17 职场文书
nginx 反向代理之 proxy_pass的实现
2021/03/31 Servers