Appearance
informat.mq 消息队列
概述
使用informat.mq
执行消息队列操作
basicGet
从队列拉取消息
javascript
informat.mq.basicGet(module,queue,autoAck)
参数 | 类型 | 描述 |
---|---|---|
module | String | 消息队列模块标识符 |
queue | String | 队列的标识符 |
autoAck | Boolean | 设置是否自动确认。一般设置为false,即不自动确认 |
返回值
类型为 QueueMessage
TIP
- 如果想获取单条消息,就要使用拉模式。但是不能用循环拉模式来代替推模式,这样会严重影响性能。
示例
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 | QueueMessage | 消息对象 |
multiple | Boolean | 是否支持批量确认 |
示例
javascript
// 收到任务完成消息事件
informat.mq.basicAck(message,true);
basicNack
Nack方式的拒绝 允许消费者拒绝一条消息,并且可选择将消息重新放回队列,或者将其丢弃
javascript
informat.mq.basicNack(message,multiple,requeue)
参数 | 类型 | 描述 |
---|---|---|
message | QueueMessage | 消息对象 |
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 | QueueMessage | 消息对象 |
requeue | Boolean | 是否重新投递到队列中 |
示例
javascript
informat.mq.basicReject(message,true);
basicRecover
重新发送未被确认的消息
javascript
informat.mq.basicRecover(message,requeue);
参数 | 类型 | 描述 |
---|---|---|
message | QueueMessage | 消息对象 |
requeue | Boolean | 如果requeue为true,则未被确认的消息会被重新加入到队列中,这样对于同一条消息来说,可能会被分配给与之前不同的消费者。如果为false,那么同一条消息会被分配给之前相同的消费者 |
示例
javascript
informat.mq.basicRecover(message, true);
如果不小心在消息队列后台删除了一个队列,怎么处理?
- 可以在织信消息队列模块的配置界面,找到对应的消息队列,编辑后重新发布,平台会自动创建消息队列。