# @elastic\.io/amqp-rpc 中文文档

规范地址：https://npmcn.com/package/%40elastic.io/amqp-rpc/

版本：2\.1\.0
npm 元数据更新时间：2026-03-13T13:32:33.621Z
中文译文更新时间：2026-11-13T10:32:59.457Z
软件包许可：ISC

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40elastic.io/amqp-rpc
原文对照：https://npmcn.com/package/%40elastic.io/amqp-rpc/?lang=original
项目主页：http://elastic.io/
源码仓库：https://github.com/elasticio/amqp-rpc

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：87.2 kB，33 个文件
- 模块格式：CommonJS
- TypeScript 类型：未声明
- Node.js 要求：\>=8\.4\.0
- 运行依赖：0 个
- 首次发布：2017-09-12T11:07:24.505Z
- 最新版本发布：2018-09-05T07:24:46.279Z
- 近 30 天下载量：26755（2026-10-13 至 2026-11-11，npm 官方下载统计）
- 已发布版本数：15（近 12 个月 0 个）

## 中文简介

RPC 为节点使用RabbitMQ

## 安装

```sh
npm install @elastic.io/amqp-rpc
```

也可以使用：`pnpm add @elastic.io/amqp-rpc`、`yarn add @elastic.io/amqp-rpc`、`bun add @elastic.io/amqp-rpc`

## README

# amqp- rpc 语录

用于节点.js的不同RPC类工具 提供

-   简单 rpc: AMQPRPC客户和AMQPRPCServer
-   远程事件编辑器: AMQPEventsSender AMQPEvents recepier

## 开始

### 难民保护委员会

管理AMQPRPCServer/客户有两种方式:

#### 临时队列

1.  服务器启动时没有预定义的队列Name, 声明临时队列 .
2.  已生成 `queueName` 从 `server` 以某种方式传递给 `client` (一或数. 应该,这次转移不是由 `amqp-rpc` lib和它应该由代码的开发者以某种方式执行,它使用 `amqp-rpc`。 。 。 .
3.  每个客户端获得此队列Name并在初始化前使用.

#### 永久队列

1.  排队是由外部服务创造出来的 .
2.  `server` 在初始化前获得队列名称并开始监听 .
3.  `client` 初始化前获得同名并用于发送请求.

#### 临时队列示例 :

```javascript
const amqplib = require('amqplib');
const {AMQPRPCServer, AMQPRPCClient} = require('@elasic.io/amqp-rpc');


async function init() {
  const connection = await amqplib.connect('amqp://localhost');
  
  // server start
  const server = new AMQPRPCServer(connection);
  server.addCommand('hello', (name) => ({message: `Hello, ${name}!`}));  
  await server.start();
  
  // name of temporary queue, has to be passed somehow to client by external service
  const requestsQueue = server.requestsQueue;
  
  // client start
  const client = new AMQPRPCClient(connection, {requestsQueue});
  await client.start();
  const response = await client.sendCommand('hello', ['Alisa']);
  console.log('Alisa got response:', response);
  
  return {server, client};
}
```

完整的工作实例,你可以找到 [这里](https://npmcn.com/package/%40elastic.io/amqp-rpc/examples/amqp-rpc-with-tmp-queue.js)。 。 。 .

#### 永久队列示例 :

```javascript
const amqplib = require('amqplib');
const {AMQPRPCServer, AMQPRPCClient} = require('@elasic.io/amqp-rpc');


async function init() {
  
  const connection = await amqplib.connect('amqp://localhost');
  
  // initial setup (e.g. should be provided on first launch)
  const queueName = 'predefined-queue-name';
  const channel = await connection.createChannel();
  await channel.assertQueue(queueName);
  
  // server start
  const server = new AMQPRPCServer(connection, {queueName});
  server.addCommand('hello', (name) => ({message: `Hello, ${name}!`}));
  await server.start();
  
  // client start
  const client = new AMQPRPCClient(connection, {requestsQueue:queueName});
  await client.start();
  const response = await client.sendCommand('hello', ['Alisa']);
  console.log('Alisa got response:', response);
  
  return {server, client};
}
```

完整的工作实例,你可以找到 [这里](https://npmcn.com/package/%40elastic.io/amqp-rpc/examples/amqp-rpc-with-permanent-queue.js)。 。 。 .

#### 服务器处理器

要在服务器中注册一个新的 RPC 命令, 请使用 `addCommand()` 方法 :

```javascript
server.addCommand('hello', (name) => ({message: `Hello, ${name}!`}));
```

Handler还可以返回一个承诺或同步函数,例如:

```javascript
server.addCommand('print-hello-world', (name) => Promise.resolve({ message: 'ok' });
```

从客户端调用 RPC 命令, 使用 `sendCommand()` 方法 :

```javascript
const result = await client.sendCommand('print-hello-world', [
  'World'
]);
```

### 事件发送器

事件接收器侧码

```javascript
  const { AMQPEventsReceiver } = require('@elastic.io/amqp-rpc');
  const amqp = require('amqplib')

  .......
  const amqpConnection = await amqp.connect('amqp://localhost');
   
  const receiver = new AMQPEventsReceiver(amqpConnection);
  
  receiver
    .on('end', () => {
      console.log('Sender stops to send events, so nothing to do more, disconnecting'); 
    })
    .on('close', () => {
      console.log('Disconnected'); 
    })
    .on('error', (e) => {
      console.log('Error happens', e);
    })
    .on('data', (msg) => {
      console.log('We\'ve got a message', msg); 
    });

  await receiver.start();
  const queueName = receiver.queueName; 
  
  console.log(`Use ${queueName} as QUEUE_TO_SEND_EVENTS in sender part of code`); 
  ........
  await receiver.disconnect();
  await amqpConnection.close();

```

事件源侧码

```javascript
  const { AMQPEventsSender } = require('@elastic.io/amqp-rpc');
  const amqp = require('amqplib')

  .......
  const amqpConnection = await amqp.connect('amqp://localhost');
   
  const sender = new AMQPEventsSender(amqpConnection, 'QUEUE_TO_SEND_EVENTS');
  sender
    .on('close', () => {
      console.log('Receiver endpoint has been removed, so sender stop to work'); 
    })
    .on('error', (e) => {
      console.log('Error happens', e);
    });

  const data = {
    key: 'value'
  };

  await sender.start();
  await sender.send(data);
  
  ........
  await sender.disconnect();
  await amqpConnection.close();

```

## 常见问题

### @elastic\.io/amqp-rpc 是什么？

RPC 为节点使用RabbitMQ

### 如何安装 @elastic\.io/amqp-rpc？

在项目目录运行 npm install @elastic\.io/amqp-rpc，或使用 pnpm add / yarn add / bun add。

### @elastic\.io/amqp-rpc 支持 TypeScript 吗？

该包的 package\.json 没有声明类型入口。需要类型提示时，可以在 npm 上查找社区维护的 @types/elastic\.io\_\_amqp-rpc 是否存在。

### @elastic\.io/amqp-rpc 支持 ESM 还是 CommonJS？

以 CommonJS 形式发布，可以直接 require\(\)；在 ES Module 项目中也可以用 import 引入（Node\.js 会把 module\.exports 作为默认导出）。

### @elastic\.io/amqp-rpc 需要什么版本的 Node\.js？

package\.json 的 engines 字段要求 Node\.js \>=8\.4\.0。版本不符时 npm 默认只给出警告，开启 engine-strict 后会拒绝安装。

### @elastic\.io/amqp-rpc 可以商用吗？

@elastic\.io/amqp-rpc 使用 ISC 许可。宽松许可：允许商业使用、修改和再分发，通常只需在分发时保留原版权与许可声明。以上为概括，不构成法律意见，请以许可原文为准。

### @elastic\.io/amqp-rpc 的下载量有多少？

根据 npm 官方下载统计，@elastic\.io/amqp-rpc 在 2026/10/13 – 2026/11/11 这 30 天内被下载 26,755 次，日均约 892 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @elastic\.io/amqp-rpc 还在维护吗？

最新版本 2\.1\.0 发布于 2018/09/05（8 年前）；至今共发布 15 个版本，其中过去 12 个月发布了 0 个；首次发布于 2017/09/12。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

