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 相关文章推荐
Jquery 高亮显示文本中重要的关键字
Dec 24 Javascript
Knockoutjs快速入门(经典)
Dec 24 Javascript
JS+DIV+CSS实现的经典标签切换效果代码
Sep 14 Javascript
HTML5基于Tomcat 7.0实现WebSocket连接并实现简单的实时聊天
Oct 31 Javascript
浅谈EasyUi ComBotree树修改 父节点选择的问题
Nov 07 Javascript
浅谈js数组和splice的用法
Dec 04 Javascript
webpack4简单入门实例
Sep 06 Javascript
详解js静态检查工具eslint配置文件
Nov 23 Javascript
浅谈目前可以使用ES10的5个新特性
Jun 25 Javascript
JavaScript中CreateTextFile函数
Aug 30 Javascript
vue使用canvas实现移动端手写签名
Sep 22 Javascript
写一个Vue loading 插件
Nov 09 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基础知识:类与对象(4) 范围解析操作符(::)
2006/12/13 PHP
php实现图片添加描边字和马赛克的方法
2014/12/10 PHP
php通过header发送自定义数据方法
2018/01/18 PHP
jquery 操作iframe的几种方法总结
2013/12/13 Javascript
jquery form 加载数据示例
2014/04/21 Javascript
我的NodeJs学习小结(一)
2014/07/06 NodeJs
bootstrap table 服务器端分页例子分享
2015/02/10 Javascript
jQuery插件MixItUp实现动画过滤和排序
2015/04/12 Javascript
jquery实现表单验证并阻止非法提交
2015/07/09 Javascript
input点击后placeholder中的提示消息消失
2016/01/15 Javascript
深入理解vue路由的使用
2017/03/24 Javascript
js鼠标经过tab选项卡时实现切换延迟
2017/03/24 Javascript
Angular2中如何使用ngx-translate进行国际化
2017/05/21 Javascript
Vue.js实现可排序的表格组件功能示例
2019/02/19 Javascript
微信小程序开发实现的选项卡(窗口顶部/底部TabBar)页面切换功能图文详解
2019/05/14 Javascript
对Layer弹窗使用及返回数据接收的实例详解
2019/09/26 Javascript
在Python中使用SQLite的简单教程
2015/04/29 Python
PyQt5实现简易计算器
2020/05/30 Python
分享8个非常流行的 Python 可视化工具包
2019/06/05 Python
Python 实用技巧之利用Shell通配符做字符串匹配
2019/08/23 Python
pyqt5 QScrollArea设置在自定义侧(任何位置)
2019/09/25 Python
python向图片里添加文字
2019/11/26 Python
python torch.utils.data.DataLoader使用方法
2020/04/02 Python
python调用API接口实现登陆短信验证
2020/05/10 Python
Python使用configparser读取ini配置文件
2020/05/25 Python
Canvas globalCompositeOperation
2018/12/18 HTML / CSS
仓库文员岗位职责
2014/04/06 职场文书
党的群众路线教育实践活动个人对照检查材料(企业)
2014/11/05 职场文书
先进个人申报材料
2014/12/30 职场文书
挂靠协议书
2015/01/27 职场文书
出国留学单位推荐信
2015/03/26 职场文书
超市收银员岗位职责
2015/04/07 职场文书
小学六一主持词开场白
2015/05/28 职场文书
Python实现byte转integer
2021/06/03 Python
Django+Celery实现定时任务的示例
2021/06/23 Python
python实现学员管理系统(面向对象版)
2022/06/05 Python