Skip to content

informat.mq 消息队列

概述

使用informat.mq执行消息队列操作

basicGet

从队列拉取消息

javascript
informat.mq.basicGet(module, queue, autoAck)
参数类型描述
moduleString消息队列模块标识符
queueString队列的标识符
autoAckBoolean设置是否自动确认。一般设置为false,即不自动确认

返回值

类型为 MqMessage

TIP

如果想获取单条消息,就要使用拉模式。但是不能用循环拉模式来代替推模式,这样会严重影响性能。

示例

javascript
var message = informat.mq.basicGet("mq", "TaskQueue", true);
console.log('message', message)
json
{
  "body": "{\r\n\t'taskId':'1',\r\n\t'taskStatus':'finished'\r\n}",
  "props": {
    "contentLength": 0,
    "deliveryTag": 1,
    "finalRetryForMessageWithNoId": false,
    "headers": {},
    "lastInBatch": false,
    "messageCount": 0,
    "projectionUsed": false,
    "publishSequenceNumber": 0,
    "receivedDeliveryMode": "NON_PERSISTENT",
    "receivedExchange": "",
    "receivedRoutingKey": "croe0zft168y3-skyduxiaoxiduilie-Test1",
    "redelivered": false
  }
}

publish

发送消息到队列中

javascript
informat.mq.publish(moduleKey, routingKey, setting, message)
参数类型描述
moduleString消息队列模块标识符
routingKeyString路由键
settingPublishSetting发送设置
messageString要发送的消息

INFO

  • 如果开启了 setting.waitForConfirms,在消息投递后会等待消息队列确认消息已投递成功,如果投递不成功则抛出异常
  • 开启setting.waitForConfirms会影响投递的性能,但是可以保证投递成功

示例

js
// 任务完成后发送消息队列
let body = {
    taskId: '1',
    taskStatus: 'finished'
}
informat.mq.publish('mq', 'TaskQueue', null, JSON.stringify(body));

queuePurge

清空队列

javascript
informat.mq.queuePurge(module, queue)
参数类型描述
moduleString消息队列模块标识符
queueString队列的标识符

示例

任务完成后发送消息队列

js
informat.mq.queuePurge('mq', 'TaskQueue');

basicAck

收到消息以后,手动应答数据接收成功

javascript
informat.mq.basicAck(message, multiple)
参数类型描述
messageMqMessage消息对象
multipleBoolean是否支持批量确认

示例

javascript
// 收到任务完成消息事件
informat.mq.basicAck(message, true);

basicNack

Nack方式的拒绝 允许消费者拒绝一条消息,并且可选择将消息重新放回队列,或者将其丢弃

javascript
informat.mq.basicNack(message, multiple, requeue)
参数类型描述
messageMqMessage消息对象
multipleBoolean如果false,表示该deliveryTag消息被拒绝。如果为true,则将小于deliveryTag之前的所有消息全部拒绝。
requeueBoolean是否重新投递到队列中

示例 收到任务完成消息事件,处理业务失败后

javascript
informat.mq.basicNack(message, true, true);

basicReject

Reject拒绝消息 当消息被拒绝后,并且requeue为false时 消息会被投递到死信队列中

javascript
informat.mq.basicReject(message, requeue)
参数类型描述
messageMqMessage消息对象
requeueBoolean是否重新投递到队列中

示例

javascript
informat.mq.basicReject(message, true);

basicRecover

重新发送未被确认的消息

javascript
informat.mq.basicRecover(message, requeue);
参数类型描述
messageMqMessage消息对象
requeueBoolean如果requeue为true,则未被确认的消息会被重新加入到队列中,这样对于同一条消息来说,可能会被分配给与之前不同的消费者。如果为false,那么同一条消息会被分配给之前相同的消费者

示例

javascript
informat.mq.basicRecover(message, true);

如果不小心在消息队列后台删除了一个队列,怎么处理?

  • 可以在织信消息队列模块的配置界面,找到对应的消息队列,编辑后重新发布,平台会自动创建消息队列。