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避免$符和其他JS库冲突的方法对比
Feb 20 Javascript
SuperSlide2实现图片滚动特效
Jun 20 Javascript
JavaScript中的对象序列化介绍
Dec 30 Javascript
vue之数据交互实例代码
Jun 16 Javascript
vue下跨域设置的相关介绍
Aug 26 Javascript
EasyUI实现下拉框多选功能
Nov 07 Javascript
代码实例ajax实现点击加载更多数据图片
Oct 12 Javascript
微信小程序调用天气接口并且渲染在页面过程详解
Jun 24 Javascript
javascript数组元素删除方法delete和splice解析
Dec 09 Javascript
javascript设计模式 ? 中介者模式原理与用法实例分析
Apr 20 Javascript
Node.js API详解之 tty功能与用法实例分析
Apr 27 Javascript
在Vue中使用Echarts可视化库的完整步骤记录
Nov 18 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 中文处理函数集合
2008/08/27 PHP
php 表单数据的获取代码
2009/03/10 PHP
PHP性能优化准备篇图解PEAR安装
2011/12/05 PHP
基于PHP创建Cookie数组的详解
2013/07/03 PHP
php把大写命名转换成下划线分割命名
2015/04/27 PHP
雄兵连第三季海报曝光,艾妮熙德成主角,蔷薇新造型
2021/03/09 国漫
C#中TrimStart,TrimEnd,Trim在javascript上的实现
2011/01/17 Javascript
JQuery触发radio或checkbox的change事件
2012/12/18 Javascript
getComputedStyle与currentStyle获取样式(style/class)
2013/03/19 Javascript
jquery分页对象使用示例
2014/04/01 Javascript
JavaScript基础篇(6)之函数表达式闭包
2015/12/11 Javascript
弹出遮罩层后禁止滚动效果【实现代码】
2016/04/29 Javascript
JQuery异步加载PartialView的方法
2016/06/07 Javascript
JavaScript代码里的判断小结
2016/08/22 Javascript
Vue数据驱动模拟实现2
2017/01/11 Javascript
jQuery遍历节点方法汇总(推荐)
2017/05/13 jQuery
基于JavaScript实现无缝滚动效果
2017/07/21 Javascript
解决VUE框架 导致绑定事件的阻止冒泡失效问题
2018/02/24 Javascript
一种angular的方法级的缓存注解(装饰器)
2018/03/13 Javascript
vue.js template模板的使用(仿饿了么布局)
2018/08/13 Javascript
vue实现购物车选择功能
2020/01/10 Javascript
微信小程序vant弹窗组件的实现方式
2020/02/21 Javascript
[02:28]DOTA2亚洲邀请赛附加赛 RECAP赛事回顾
2015/01/29 DOTA
[03:07]2015国际邀请赛选手档案EHOME.rOtK 是什么让他落泪?
2015/07/31 DOTA
用python实现批量重命名文件的代码
2012/05/25 Python
分析Python中设计模式之Decorator装饰器模式的要点
2016/03/02 Python
Python中使用支持向量机SVM实践
2017/12/27 Python
Python实现PS滤镜特效Marble Filter玻璃条纹扭曲效果示例
2018/01/29 Python
Python使用numpy模块创建数组操作示例
2018/06/20 Python
Python json转字典字符方法实例解析
2020/04/13 Python
PHP两种查询函数array/row的区别
2013/06/03 面试题
商务英语专业求职信范文
2014/01/28 职场文书
银行竞聘演讲稿
2014/05/16 职场文书
商超业务员岗位职责
2015/02/13 职场文书
认识实习感想
2015/08/10 职场文书
2016年百日安全生产活动总结
2016/04/06 职场文书