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 相关文章推荐
javascript各种复制代码收集
Sep 20 Javascript
JQuery扩展插件Validate—4设置错误提示的样式
Sep 05 Javascript
JavaScript生成SQL查询表单的方法
Aug 13 Javascript
jQuery页面刷新(局部、全部)问题分析
Jan 09 Javascript
node.js连接mongoDB数据库 快速搭建自己的web服务
Apr 17 Javascript
js HTML5手机刮刮乐代码
Sep 29 Javascript
echarts多条折线图动态分层的实现方法
May 24 Javascript
Vue实现数据表格合并列rowspan效果
Nov 30 Javascript
使用flow来规范javascript的变量类型
Sep 12 Javascript
vue 父组件通过v-model接收子组件的值的代码
Oct 27 Javascript
Vue中多元素过渡特效的解决方案
Feb 05 Javascript
js正则匹配markdown里的图片标签的实现
Mar 24 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
Apache+php+mysql在windows下的安装与配置图解(最新版)
2008/11/30 PHP
php实现简单洗牌算法
2013/06/18 PHP
jQuery中的RadioButton,input,CheckBox取值赋值实现代码
2014/02/18 PHP
php数组冒泡排序算法实例
2016/05/06 PHP
Prototype使用指南之enumerable.js
2007/01/10 Javascript
JQuery 学习笔记 选择器之六
2009/07/23 Javascript
javascript模块化是什么及其优缺点介绍
2013/09/02 Javascript
div模拟选择框示例代码
2013/11/03 Javascript
js统计页面的来访次数实现代码
2014/05/09 Javascript
node.js适合游戏后台开发吗?
2014/09/03 Javascript
Javascript中prototype属性实现给内置对象添加新的方法
2015/05/14 Javascript
JavaScript中setUTCFullYear()方法的使用简介
2015/06/12 Javascript
AngularJS中使用HTML5手机摄像头拍照
2016/02/22 Javascript
浅谈Node异步编程的机制
2017/10/18 Javascript
JavaScript JMap类定义与使用方法示例
2019/01/22 Javascript
微信小程序性能优化之checkSession的使用
2019/03/06 Javascript
vue+element实现打印页面功能
2019/05/20 Javascript
vue elementUI 表单校验功能之数组多层嵌套
2019/06/04 Javascript
Vue 3.x+axios跨域方案的踩坑指南
2019/07/04 Javascript
js前端传json后台接收‘‘被转为quot的问题解决
2020/11/12 Javascript
python实现bucket排序算法实例分析
2015/05/04 Python
使用Python判断质数(素数)的简单方法讲解
2016/05/05 Python
Python使用itertools模块实现排列组合功能示例
2018/07/02 Python
python实现超市管理系统(后台管理)
2019/10/25 Python
python 实现保存最新的三份文件,其余的都删掉
2019/12/22 Python
python GUI库图形界面开发之PyQt5中QWebEngineView内嵌网页与Python的数据交互传参详细方法实例
2020/02/26 Python
CSS3 仿微信聊天小气泡实例代码
2017/04/05 HTML / CSS
伦敦著名的运动鞋综合商店:Footpatrol
2019/03/25 全球购物
XD健身器材:Kevlar球、Crossfit健身球
2019/03/26 全球购物
Lululemon加拿大官网:加拿大知名体育服装零售商
2019/04/12 全球购物
英国最大的独立玩具专卖店:The Entertainer
2019/09/06 全球购物
讲文明树新风公益广告宣传方案
2014/02/25 职场文书
双拥工作宣传标语
2014/06/26 职场文书
教师个人事迹材料
2014/12/17 职场文书
Mac M1安装mnmp (Mac+Nginx+MySQL+PHP) 开发环境
2021/03/29 PHP
Java服务调用RestTemplate与HttpClient的使用详解
2022/06/21 Java/Android