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 相关文章推荐
extjs 如何给column 加上提示
Jul 29 Javascript
JavaScript调试工具汇总
Dec 23 Javascript
Javascript writable特性介绍
Feb 27 Javascript
JavaScript基本数据类型及值类型和引用类型
Aug 25 Javascript
讲解JavaScript的Backbone.js框架的MVC结构设计理念
Feb 14 Javascript
非常漂亮的相册集 使用jquery制作相册集
Apr 28 Javascript
浅谈Vue.js 1.x 和 2.x 实例的生命周期
Jul 25 Javascript
详解如何用webpack4从零开始构建react开发环境
Jan 27 Javascript
Node.js对MongoDB进行增删改查操作的实例代码
Apr 18 Javascript
JavaScript实现图片上传并预览并提交ajax
Sep 30 Javascript
JS对日期操作封装代码实例
Nov 08 Javascript
JS实现页面炫酷的时钟特效示例
Aug 14 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教程 变量定义
2009/10/23 PHP
php Rename 更改文件、文件夹名称
2011/05/24 PHP
PHP表单数据写入MySQL数据库的代码
2016/05/31 PHP
PHP使用imagick扩展实现合并图像的方法
2017/04/25 PHP
PHP与JavaScript针对Cookie的读写、交互操作方法详解
2017/08/07 PHP
表单提交时自动复制内容到剪贴板的js代码
2007/03/16 Javascript
jquery.pagination.js 无刷新分页实现步骤分享
2012/05/23 Javascript
Jquery实现仿腾讯娱乐频道焦点图(幻灯片)特效
2015/03/06 Javascript
基于Jquery+div+css实现弹出登录窗口(代码超简单)
2015/10/27 Javascript
js判断手机访问或者PC的几个例子(常用于手机跳转)
2015/12/15 Javascript
原生js编写基于面向对象的分页组件
2016/12/05 Javascript
JS实现拖拽的方法分析
2016/12/20 Javascript
js实现密码强度检验
2017/01/15 Javascript
浅谈react.js 之 批量添加与删除功能
2017/04/17 Javascript
vue 封装自定义组件之tabal列表编辑单元格组件实例代码
2017/09/07 Javascript
Vue2.0实现组件数据的双向绑定问题
2018/03/06 Javascript
React路由管理之React Router总结
2018/05/10 Javascript
vue-cli项目中使用echarts图表实例
2018/10/22 Javascript
Vue-CLI与Vuex使用方法实例分析
2020/01/06 Javascript
jQuery实现简单聊天室
2020/02/08 jQuery
Vue 根据条件判断van-tab的显示方式
2020/08/03 Javascript
[18:32]DOTA2 HEROS教学视频教你分分钟做大人-谜团
2014/06/12 DOTA
手把手教你用python抢票回家过年(代码简单)
2018/01/21 Python
通过python实现windows桌面截图代码实例
2020/01/17 Python
Python 中的pygame安装与配置教程详解
2020/02/10 Python
python在linux环境下安装skimage的示例代码
2020/10/14 Python
Django如何重置migration的几种情景
2021/02/24 Python
毕业生机械建模求职信
2013/10/14 职场文书
市场营销方案范文
2014/03/11 职场文书
扩大国家免疫规划实施方案
2014/03/21 职场文书
2014年平安创建工作总结
2014/11/24 职场文书
离职证明格式样本
2015/06/12 职场文书
庆七一主持词
2015/06/29 职场文书
运动会闭幕式主持词
2015/07/01 职场文书
不知如何爱孩子,这些方法教会您
2019/08/06 职场文书
基于Python和openCV实现图像的全景拼接详细步骤
2021/10/05 Python