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筛选器children()案例详解(图文)
Feb 17 Javascript
得到form下的所有的input的js代码
Nov 07 Javascript
使用coffeescript编写node.js项目的方法汇总
Aug 05 Javascript
JS简单获取客户端IP地址的方法【调用搜狐接口】
Sep 05 Javascript
修改UA在PC中访问只能在微信中打开的链接方法
Nov 27 Javascript
vue+element的表格实现批量删除功能示例代码
Aug 17 Javascript
jQuery实现的简单歌词滚动功能示例
Jan 07 jQuery
layui复选框的全选与取消实现方法
Sep 02 Javascript
微信小程序tab切换可滑动切换导航栏跟随滚动实现代码
Sep 04 Javascript
小程序使用wxs解决wxml保留2位小数问题
Dec 13 Javascript
antd vue 刷新保留当前页面路由,保留选中菜单,保留menu选中操作
Aug 06 Javascript
JavaScript编码小技巧分享
Sep 17 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面向对象全攻略 (十) final static const关键字的使用
2009/09/30 PHP
PHP常用技巧总结(附函数代码)
2012/02/04 PHP
ThinkPHP查询语句与关联查询用法实例
2014/11/01 PHP
100多行PHP代码实现socks5代理服务器[2]
2016/05/05 PHP
PHP迭代与递归实现无限级分类
2017/08/28 PHP
PHP使用PDO实现mysql防注入功能详解
2019/12/20 PHP
PHP var关键字相关原理及使用实例解析
2020/07/11 PHP
PHP7 字符串处理机制修改
2021/03/09 PHP
利用javascript中的call实现继承
2007/01/22 Javascript
用JavaScript显示随机图像或引用
2009/04/21 Javascript
asp(javascript)全角半角转换代码 dbc2sbc
2009/08/06 Javascript
jQuery 白痴级入门教程
2009/11/11 Javascript
js 上传图片预览问题
2010/12/06 Javascript
vue组件间通信解析
2017/03/01 Javascript
vuejs手把手教你写一个完整的购物车实例代码
2017/07/06 Javascript
webpack项目使用eslint建立代码规范实现
2019/05/16 Javascript
详解vue为什么要求组件模板只能有一个根元素
2019/07/22 Javascript
详解vue 命名视图
2019/08/14 Javascript
微信小程序实现录制、试听、上传音频功能(带波形图)
2020/02/27 Javascript
JS常用跨域方法实现原理解析
2020/12/09 Javascript
[36:02]DOTA2上海特级锦标赛D组小组赛#2 Liquid VS VP第一局
2016/02/28 DOTA
python在控制台输出进度条的方法
2015/06/20 Python
python开发环境PyScripter中文乱码问题解决方案
2016/09/11 Python
pytorch 常用线性函数详解
2020/01/15 Python
最新版 Windows10上安装Python 3.8.5的步骤详解
2020/11/28 Python
css3 border旋转时的动画应用
2016/01/22 HTML / CSS
员工自我鉴定范文
2013/10/06 职场文书
仓库主管岗位职责
2014/03/02 职场文书
师德师风的心得体会
2014/09/02 职场文书
党员对十八届四中全会的期盼思想汇报范文
2014/10/17 职场文书
北京英文导游词
2015/02/12 职场文书
2015年科学教研组工作总结
2015/07/22 职场文书
授权协议书范本(3篇)
2019/10/15 职场文书
python实现调用摄像头并拍照发邮箱
2021/04/27 Python
ORM模型框架操作mysql数据库的方法
2021/07/25 MySQL
Vue Element plus使用方法梳理
2022/12/24 Vue.js