当前位置:首页 > Java

nodejs如何对接java

2026-03-22 18:23:05Java

对接 Node.js 与 Java 的方法

使用 RESTful API 通信

Node.js 和 Java 可以通过 HTTP 协议进行通信。Java 可以提供一个 RESTful API,Node.js 通过 HTTP 请求调用这些接口。

在 Java 中,可以使用 Spring Boot 快速搭建 RESTful 服务:

@RestController
@RequestMapping("/api")
public class ApiController {
    @GetMapping("/hello")
    public String hello() {
        return "Hello from Java";
    }
}

在 Node.js 中,使用 axiosfetch 调用 Java 接口:

const axios = require('axios');
axios.get('http://localhost:8080/api/hello')
    .then(response => console.log(response.data))
    .catch(error => console.error(error));

使用 gRPC 进行高性能通信

gRPC 是一个高性能的 RPC 框架,支持多种语言。首先需要定义 .proto 文件:

syntax = "proto3";
service Greeter {
    rpc SayHello (HelloRequest) returns (HelloReply) {}
}
message HelloRequest {
    string name = 1;
}
message HelloReply {
    string message = 2;
}

Java 实现 gRPC 服务端:

public class GreeterImpl extends GreeterGrpc.GreeterImplBase {
    @Override
    public void sayHello(HelloRequest req, StreamObserver<HelloReply> responseObserver) {
        HelloReply reply = HelloReply.newBuilder()
            .setMessage("Hello " + req.getName())
            .build();
        responseObserver.onNext(reply);
        responseObserver.onCompleted();
    }
}

Node.js 实现 gRPC 客户端:

const grpc = require('@grpc/grpc-js');
const protoLoader = require('@grpc/proto-loader');
const packageDefinition = protoLoader.loadSync('greeter.proto');
const greeterProto = grpc.loadPackageDefinition(packageDefinition).Greeter;
const client = new greeterProto('localhost:50051', grpc.credentials.createInsecure());
client.sayHello({ name: 'Node.js' }, (err, response) => {
    console.log(response.message);
});

使用消息队列(如 RabbitMQ)

通过消息队列可以实现异步通信。Java 作为生产者,Node.js 作为消费者。

nodejs如何对接java

Java 发送消息:

ConnectionFactory factory = new ConnectionFactory();
factory.setHost("localhost");
try (Connection connection = factory.newConnection();
     Channel channel = connection.createChannel()) {
    channel.queueDeclare("queue_name", false, false, false, null);
    channel.basicPublish("", "queue_name", null, "Hello from Java".getBytes());
}

Node.js 接收消息:

const amqp = require('amqplib');
amqp.connect('amqp://localhost').then(connection => {
    return connection.createChannel();
}).then(channel => {
    const queue = 'queue_name';
    channel.assertQueue(queue, { durable: false });
    channel.consume(queue, msg => {
        console.log(msg.content.toString());
    }, { noAck: true });
}).catch(error => console.error(error));

使用 JNI 直接调用 Java 代码

Node.js 可以通过 node-javaedge-js 直接调用 Java 代码。

安装 node-java

nodejs如何对接java

npm install java

调用 Java 方法:

const java = require('java');
java.classpath.push('path/to/your.jar');
const YourClass = java.import('com.example.YourClass');
const instance = new YourClass();
instance.method('arg', (err, result) => {
    console.log(result);
});

使用 WebSocket 实时通信

Java 和 Node.js 可以通过 WebSocket 进行实时双向通信。

Java 使用 Spring WebSocket:

@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {
    @Override
    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
        registry.addHandler(new MyHandler(), "/ws");
    }
}

Node.js 使用 ws 库:

const WebSocket = require('ws');
const ws = new WebSocket('ws://localhost:8080/ws');
ws.on('message', message => {
    console.log(message);
});
ws.send('Hello from Node.js');

注意事项

  • 确保网络连接正常,防火墙不会阻止通信。
  • 处理跨域问题(CORS)时,需要在 Java 端配置允许 Node.js 的域名。
  • 对于高性能场景,gRPC 或消息队列比 RESTful API 更合适。
  • 直接调用 Java 代码的方法会增加系统耦合度,需谨慎使用。

标签: nodejsjava
分享给朋友:

相关文章

如何打开java

如何打开java

打开 Java 程序的方法 通过命令行运行 Java 程序 确保已安装 Java Development Kit (JDK) 并配置环境变量。使用 javac 编译 .java 文件,生成 .clas…

如何编译java文件

如何编译java文件

安装JDK 确保系统已安装Java Development Kit(JDK)。可通过命令行输入 javac -version 和 java -version 验证。若未安装,需从Oracle或Open…

如何成为java架构师

如何成为java架构师

掌握扎实的Java基础 深入理解Java核心知识,包括多线程、集合框架、JVM原理、设计模式等。熟悉Java生态中的常用框架如Spring、MyBatis、Hibernate等,并能分析其源码实现。…

eclipse如何创建java

eclipse如何创建java

在Eclipse中创建Java项目 打开Eclipse后,选择菜单栏中的"File" -> "New" -> "Java Project"。在弹出的对话框中输入项目名称,确保"Use de…

java如何取绝对值

java如何取绝对值

取绝对值的方法 在Java中,取绝对值可以通过以下几种方式实现: 使用Math.abs()方法 Math.abs()是Java中最常用的取绝对值方法,适用于多种数据类型: int abso…

vue实现java登录注册

vue实现java登录注册

实现 Vue 与 Java 后端的登录注册功能 前端 Vue 部分 安装必要的依赖(如 axios 用于 HTTP 请求): npm install axios 创建登录表单组件(Login.vue…