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 源码分析笔记(2) 变量列表
May 28 Javascript
ASP.NET jQuery 实例17 通过使用jQuery validation插件校验ListBox
Feb 03 Javascript
JS 实现图片直接下载示例代码
Jul 22 Javascript
jQuery实现鼠标经过购物车出现下拉框代码(推荐)
Jul 21 Javascript
jquery插件uploadify多图上传功能实现代码
Aug 12 Javascript
JS版微信6.0分享接口用法分析
Oct 13 Javascript
Vue开发中整合axios的文件整理
Apr 29 Javascript
Vue数组更新及过滤排序功能
Aug 10 Javascript
layui前端框架之table表数据的刷新方法
Aug 17 Javascript
Vue中mintui的field实现blur和focus事件的方法
Aug 25 Javascript
使用Vue 实现滑动验证码功能
Jun 27 Javascript
vue-router路由懒加载及实现的3种方式
Feb 28 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实现文件安全下载
2006/10/09 PHP
按上下级层次关系输出内容的PHP代码
2010/07/17 PHP
PHP实现多进程并行操作的详解(可做守护进程)
2013/06/18 PHP
PHP验证码类ValidateCode解析
2017/01/07 PHP
PHP5.6读写excel表格文件操作示例
2019/02/26 PHP
纯CSS3实现质感细腻丝滑按钮
2021/03/09 HTML / CSS
解决jquery .ajax 在IE下卡死问题的解决方法
2009/10/26 Javascript
一个报数游戏js版(约瑟夫环问题)
2010/08/05 Javascript
JavaScript中去掉数组中的重复值的实现方法
2011/08/03 Javascript
.net,js捕捉文本框回车键事件的小例子(兼容多浏览器)
2013/03/11 Javascript
javascript中直接写php代码的方法
2013/07/31 Javascript
js防止页面被iframe调用的方法
2014/10/30 Javascript
JS实现仿FLASH效果的竖排导航代码
2015/09/15 Javascript
使用JavaScript脚本无法直接改变Asp.net中Checkbox控件的Enable属性的解决方法
2015/09/16 Javascript
正则表达式优化JSON字符串的技巧
2015/12/24 Javascript
Listloading.js移动端上拉下拉刷新组件
2016/08/04 Javascript
vue移动端监听滚动条高度的实现方法
2018/09/03 Javascript
使用Angular Cli如何创建Angular私有库详解
2019/01/30 Javascript
微信小程序实现弹出菜单动画
2019/06/21 Javascript
配置node服务器并且链接微信公众号接口配置步骤详解
2019/06/21 Javascript
JavaScript前端开发时数值运算的小技巧
2020/07/28 Javascript
pip 错误unused-command-line-argument-hard-error-in-future解决办法
2014/06/01 Python
深入学习Python中的上下文管理器与else块
2017/08/27 Python
Python列表删除的三种方法代码分享
2017/10/31 Python
Python版名片管理系统
2018/11/30 Python
pytorch-神经网络拟合曲线实例
2020/01/15 Python
解决pycharm每次打开项目都需要配置解释器和安装库问题
2020/02/26 Python
pycharm设置python文件模板信息过程图解
2020/03/10 Python
python实现密码强度校验
2020/03/18 Python
Python enumerate() 函数如何实现索引功能
2020/06/29 Python
Fanatics法国官网:美国体育电商
2019/08/27 全球购物
.NET常见笔试题集
2012/12/01 面试题
应届毕业生通用的自荐书范文
2014/02/07 职场文书
公司的力量观后感
2015/06/05 职场文书
长辈生日祝福语大全(72句)
2019/08/09 职场文书
go语言-在mac下brew升级golang
2021/04/25 Golang