Appearance
informat.mq 消息队列
概述
使用informat.mq
执行消息队列操作
basicGet
从队列拉取消息
javascript
informat.mq.basicGet(module, queue, autoAck)
参数 | 类型 | 描述 |
---|---|---|
module | String | 消息队列模块标识符 |
queue | String | 队列的标识符 |
autoAck | Boolean | 设置是否自动确认。一般设置为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)
参数 | 类型 | 描述 |
---|---|---|
module | String | 消息队列模块标识符 |
routingKey | String | 路由键 |
setting | PublishSetting | 发送设置 |
message | String | 要发送的消息 |
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)
参数 | 类型 | 描述 |
---|---|---|
module | String | 消息队列模块标识符 |
queue | String | 队列的标识符 |
示例
任务完成后发送消息队列
js
informat.mq.queuePurge('mq', 'TaskQueue');
basicAck
收到消息以后,手动应答数据接收成功
javascript
informat.mq.basicAck(message, multiple)
参数 | 类型 | 描述 |
---|---|---|
message | MqMessage | 消息对象 |
multiple | Boolean | 是否支持批量确认 |
示例
javascript
// 收到任务完成消息事件
informat.mq.basicAck(message, true);
basicNack
Nack方式的拒绝 允许消费者拒绝一条消息,并且可选择将消息重新放回队列,或者将其丢弃
javascript
informat.mq.basicNack(message, multiple, requeue)
参数 | 类型 | 描述 |
---|---|---|
message | MqMessage | 消息对象 |
multiple | Boolean | 如果false,表示该deliveryTag消息被拒绝。如果为true,则将小于deliveryTag之前的所有消息全部拒绝。 |
requeue | Boolean | 是否重新投递到队列中 |
示例 收到任务完成消息事件,处理业务失败后
javascript
informat.mq.basicNack(message, true, true);
basicReject
Reject拒绝消息 当消息被拒绝后,并且requeue为false时 消息会被投递到死信队列中
javascript
informat.mq.basicReject(message, requeue)
参数 | 类型 | 描述 |
---|---|---|
message | MqMessage | 消息对象 |
requeue | Boolean | 是否重新投递到队列中 |
示例
javascript
informat.mq.basicReject(message, true);
basicRecover
重新发送未被确认的消息
javascript
informat.mq.basicRecover(message, requeue);
参数 | 类型 | 描述 |
---|---|---|
message | MqMessage | 消息对象 |
requeue | Boolean | 如果requeue为true,则未被确认的消息会被重新加入到队列中,这样对于同一条消息来说,可能会被分配给与之前不同的消费者。如果为false,那么同一条消息会被分配给之前相同的消费者 |
示例
javascript
informat.mq.basicRecover(message, true);
如果不小心在消息队列后台删除了一个队列,怎么处理?
- 可以在织信消息队列模块的配置界面,找到对应的消息队列,编辑后重新发布,平台会自动创建消息队列。