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中的var_dump函数实现代码
Sep 07 Javascript
JavaScript 错误处理与调试经验总结
Aug 10 Javascript
js展开闭合效果演示代码
Jul 24 Javascript
js innerHTML 改变div内容的方法
Aug 03 Javascript
jQuery中获取checkbox选中项等操作及注意事项
Nov 24 Javascript
jquery事件的ready()方法使用详解
Nov 11 Javascript
AngularJS入门教程之AngularJS表达式
Apr 18 Javascript
Angular 页面跳转时传参问题
Aug 01 Javascript
webpack+vue-cli项目中引入外部非模块格式js的方法
Sep 28 Javascript
vue模仿网易云音乐的单页面应用
Apr 24 Javascript
vue.js 2.0实现简单分页效果
Jul 29 Javascript
vue中利用mqtt服务端实现即时通讯的步骤记录
Jul 01 Vue.js
浅谈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数据库连接时容易出错的特殊符号问题
2010/09/01 PHP
PHP实现加强版加密解密类实例
2015/07/29 PHP
实例说明js脚本语言和php脚本语言的区别
2019/04/04 PHP
javascript 字符 Escape,encodeURI,encodeURIComponent
2009/07/09 Javascript
Javascript 解疑
2009/11/11 Javascript
javascript dom 基本操作小结
2010/04/11 Javascript
一个JS的日期格式化算法示例
2013/07/31 Javascript
利用javaScript实现点击输入框弹出窗体选择信息
2013/12/11 Javascript
javascript对JSON数据排序的3个例子
2014/04/12 Javascript
Jquery实现图片预加载与延时加载的方法
2014/12/22 Javascript
jQuery Validate表单验证插件 添加class属性形式的校验
2016/01/18 Javascript
JS实现刷新父页面不弹出提示框的方法
2016/06/22 Javascript
jquery实现左右滑动式轮播图
2017/03/02 Javascript
JSONP基础知识详解
2017/03/19 Javascript
js+html5实现侧滑页面效果
2017/07/15 Javascript
Node.js创建HTTP文件服务器的使用示例
2018/05/11 Javascript
vue动态设置img的src路径实例
2018/09/18 Javascript
vue keep-alive列表页缓存 详情页返回上一页不刷新,定位到之前位置
2019/11/26 Javascript
常见的在Python中实现单例模式的三种方法
2015/04/08 Python
python实现BackPropagation算法
2017/12/14 Python
Python文本特征抽取与向量化算法学习
2017/12/22 Python
python实现按长宽比缩放图片
2018/06/07 Python
python 基本数据类型占用内存空间大小的实例
2018/06/12 Python
OpenCV 边缘检测
2019/07/10 Python
tensor和numpy的互相转换的实现示例
2019/08/02 Python
python 字符串常用函数详解
2019/09/11 Python
pycharm2020.1.2永久破解激活教程,实测有效
2020/10/29 Python
针对HTML5的Web Worker使用攻略
2015/07/12 HTML / CSS
美国汽车轮胎和轮毂销售网站:Tire Rack
2018/01/11 全球购物
大二学生学习个人自我评价
2014/01/19 职场文书
学习雷锋精神心得体会范文
2014/03/12 职场文书
《一个小村庄的故事》教学反思
2014/04/13 职场文书
单位活动策划方案
2014/08/17 职场文书
立春观后感
2015/06/18 职场文书
创业计划书之青年旅馆
2019/09/23 职场文书
python 如何在 Matplotlib 中绘制垂直线
2021/04/02 Python