首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RateLimit和ibmmq模块Node.js

RateLimit和ibmmq模块Node.js
EN

Stack Overflow用户
提问于 2022-11-03 13:15:54
回答 1查看 31关注 0票数 0

我正在使用ibmmq模块https://github.com/ibm-messaging/mq-mqi-nodejs

我正在尝试创建一个应用程序,它将每500 to从队列中获取一条消息。有一个选项getLoopPollTimeMs,但是当队列中没有消息,然后消息出现时,它就能工作了。

我试过使用限幅器https://www.npmjs.com/package/limiter

代码语言:javascript
复制
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)的方法不起作用。应用程序读取一条消息,处理它,然后从队列中读取第二条消息,并且出错。

代码语言:javascript
复制
terminate called after throwing an instance of 'Napi::Error'
  what():  GetDone: MQCC = MQCC_FAILED [2] MQRC = MQRC_HOBJ_ERROR [2019]
Aborted 

队列已关闭,但getCB仍在工作。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-08 08:37:24

根据注释,可以使用调优参数,请参阅https://github.com/ibm-messaging/mq-mqi-nodejshttps://github.com/ibm-messaging/mq-mqi-nodejs/blob/148b70db036c80f442adb34769d5d239a6f05b65/lib/mqi.js#L575的第196-202行。

同样,按照注释,您可以使用

代码语言:javascript
复制
 mq.setTuningParameters({getLoopDelayTimeMs: 2000, maxConsecutiveGets: 1}) 

在2秒内达到1条信息的节流阀限制。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74303689

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档