nats service large data的处理

nats nodejs 实现有一个支持large 数据的示例,比较有意思,记录下

内部玩法

通过在service endpoint 处理中,response 多个数据,然后,对于request 使用nodejs 包装的requestMany

  • 参考代码

server

import { connect } from "@nats-io/transport-node";

import {Svcm} from "@nats-io/services"
const nc = await connect();

const svc = new Svcm(nc);
const service = await svc.add({
  name: "max_large",
  version: "0.0.1",
  description: "returns max number in a request",
});

service.addEndpoint("max_large", (err, msg) => {
  console.log(`max request: ${msg?.data}`);
  msg?.respond(msg?.data);
  msg?.respond("ddd");
  msg?.respond("eee");
  msg?.respond("fff");
  msg?.respond();
});

client

import { connect, headers } from "@nats-io/transport-node";

const nc = await connect();

const response = await nc.requestMany("max_large", JSON.stringify([1, 2, 3]));

for await (const msg of response) {
    console.log(`response: ${msg.string()}`);
} 

说明

当然对于requestMany 并不是所有client 都支持,但是对于一些语言可以自己扩展,但是此模式还是挺有意思的,比较有用

参考资料

https://github.com/nats-io/nats.js/blob/main/services/examples/03_bigdata-client.ts

https://github.com/nats-io/nats.js/blob/main/services/examples/03_bigdata.ts

https://github.com/nats-io/nats.js/blob/main/core/src/nats.ts#L187

posted on 2025-10-23 08:00  荣锋亮  阅读(13)  评论(0)    收藏  举报

导航