nodejs如何对接java
对接 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 中,使用 axios 或 fetch 调用 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 作为消费者。

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-java 或 edge-js 直接调用 Java 代码。
安装 node-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 代码的方法会增加系统耦合度,需谨慎使用。






