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 innerHTML、outerHTML、innerText、outerText的区别
Nov 24 Javascript
利用腾讯的ip地址库做ip物理地址定位
Jul 24 Javascript
jQuery学习笔记之jQuery的动画
Dec 22 Javascript
JS实现横向拉伸动感伸缩菜单效果代码
Sep 04 Javascript
JavaScript弹窗基础篇
Apr 27 Javascript
jQuery自定义图片缩放拖拽插件imageQ实现方法(附demo源码下载)
May 27 Javascript
jQuery插件 Jqplot图表实例
Jun 18 Javascript
js添加千分位的实现代码(超简单)
Aug 01 Javascript
微信 java 实现js-sdk 图片上传下载完整流程
Oct 21 Javascript
详解VueJs中的V-bind指令
May 03 Javascript
解决element-ui中下拉菜单子选项click事件不触发的问题
Aug 22 Javascript
JavaScript类的继承操作实例总结
Dec 20 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 模板高级篇总结
2006/12/21 PHP
php的正则处理函数总结分析
2008/06/20 PHP
php 求质素(素数) 的实现代码
2011/04/12 PHP
php随机输出名人名言的代码
2012/10/07 PHP
PHP static局部静态变量和全局静态变量总结
2014/03/02 PHP
PHP中key和current,next的联合运用实例分析
2016/03/29 PHP
Yii2针对指定url的生成及图片等的引入方法小结
2016/07/18 PHP
PHP如何使用cURL实现Get和Post请求
2020/07/11 PHP
简单的js分页脚本
2009/05/21 Javascript
json 实例详细说明教程
2009/10/31 Javascript
javascript-简单的计算器实现步骤分解(附图)
2013/05/30 Javascript
JavaScript 操作table,可以新增行和列并且隔一行换背景色代码分享
2013/07/05 Javascript
JavaScript代码复用模式详解
2014/11/07 Javascript
JavaScript数组去重的五种方法
2015/11/05 Javascript
JavaScript轻松创建级联函数的方法示例
2017/02/10 Javascript
Bootstrap table使用方法记录
2017/08/23 Javascript
Vue创建头部组件示例代码详解
2018/10/23 Javascript
vue移动端城市三级联动组件使用详解
2019/07/26 Javascript
微信小程序实现可长按移动控件
2020/11/01 Javascript
[02:42]DOTA2城市挑战赛收官在即 四强之争风起云涌
2018/06/05 DOTA
Python3基础之基本数据类型概述
2014/08/13 Python
Python基于二分查找实现求整数平方根的方法
2016/05/12 Python
使用pygame模块编写贪吃蛇的实例讲解
2018/02/05 Python
Django框架使用内置方法实现登录功能详解
2019/06/12 Python
python 同时读取多个文件的例子
2019/07/16 Python
django 微信网页授权登陆的实现
2019/07/30 Python
解决pycharm 安装numpy失败的问题
2019/12/05 Python
利用python实现.dcm格式图像转为.jpg格式
2020/01/13 Python
tensorflow 动态获取 BatchSzie 的大小实例
2020/06/30 Python
python+selenium+chrome实现淘宝购物车秒杀自动结算
2021/01/07 Python
德国PC硬件网站:CASEKING
2016/10/20 全球购物
实习生个人找工作的自我评价
2013/10/30 职场文书
运动会通讯稿100字
2014/01/31 职场文书
园林技术个人的自我评价
2014/02/15 职场文书
终止劳动合同协议书
2014/04/14 职场文书
春游踏青活动方案
2014/08/14 职场文书