我正在使用ibmmq模块https://github.com/ibm-messaging/mq-mqi-nodejs。
我正在尝试创建一个应用程序,它将每500 to从队列中获取一条消息。有一个选项getLoopPollTimeMs,但是当队列中没有消息,然后消息出现时,它就能工作了。
我试过使用限幅器https://www.npmjs.com/package/limiter
mq.Get(openQueue.ref as mq.MQObject, mqmd, gmo, await this.getCB.bind(this))
async getCB(...) {
const remainingMessages = await this.limiter.removeTokens(1);
...
}因此,应用程序从队列中读取消息并对其进行处理。同时,由于异步回调,它读取所有其他消息并等待限制器处理。但是,我需要它来读取下一条消息时,只有在前一个被处理。我尝试过GetSync,但是限制器的工作方式绝对不正确,并且当它同步应用程序中的其他进程时停止工作。
如何从队列中只收到一条消息?如果我每次都在mq.GetDone(hObj);中使用getCB,然后用mq.Get连接到setInterval中的队列,这是唯一的方法吗?有什么建议吗?
Upd:使用mq.GetDone(hObj)的方法不起作用。应用程序读取一条消息,处理它,然后从队列中读取第二条消息,并且出错。
terminate called after throwing an instance of 'Napi::Error'
what(): GetDone: MQCC = MQCC_FAILED [2] MQRC = MQRC_HOBJ_ERROR [2019]
Aborted 队列已关闭,但getCB仍在工作。
发布于 2022-11-08 08:37:24
根据注释,可以使用调优参数,请参阅https://github.com/ibm-messaging/mq-mqi-nodejs和https://github.com/ibm-messaging/mq-mqi-nodejs/blob/148b70db036c80f442adb34769d5d239a6f05b65/lib/mqi.js#L575的第196-202行。
同样,按照注释,您可以使用
mq.setTuningParameters({getLoopDelayTimeMs: 2000, maxConsecutiveGets: 1}) 在2秒内达到1条信息的节流阀限制。
https://stackoverflow.com/questions/74303689
复制相似问题