gpt4 book ai didi

javascript - IBM MQ 如何一条一条地读取消息,而不是一次性在队列管理器中提供所有消息?

转载 作者:行者123 更新时间:2023-12-02 22:15:59 30 4
gpt4 key购买 nike

现在,我的应用程序接收队列管理器中的所有可用消息。我在本地收集并一一处理。我是否可以将其配置为接收一条消息,执行一些工作(可能需要一些时间),删除收到的消息,然后重复? IBM MQ 可以实现这种行为吗?代码已更新

function listenToMQ() {
const qMgr = inbound.queueManagerName;
const qName = inbound.queueName;
const connName = inbound.host;

const cno = new mq.MQCNO();
const sco = new mq.MQSCO();
const csp = new mq.MQCSP();
const cd = new mq.MQCD();
cno.SecurityParms = csp;
csp.UserId = inbound.userID;
csp.authenticationType = 0;
cno.Options |= MQC.MQCNO_CLIENT_BINDING;
cd.ConnectionName = connName;
cd.ChannelName = inbound.channelName;
cd.SSLClientAuth = MQC.MQSCA_OPTIONAL;
cd.MaxMsgLength = 104857600;
cno.ClientConn = cd;
cno.SSLConfig = sco;

mq.setTuningParameters({
syncMQICompat: true });

mq.Connx(qMgr, cno, function(err, hConn) {
if (err) {
logger.errorLogger().error(err.message);
} else {
const od = new mq.MQOD();
od.ObjectName = qName;
od.ObjectType = MQC.MQOT_Q;
const openOptions = MQC.MQOO_BROWSE;
mq.Open(hConn, od, openOptions, function(err, hObj) {
queueHandle = hObj;
if (err) {
logger.errorLogger().error(err.message);
} else {
getMessages();
}
});
} }); }


function getMessages() {
const md = new mq.MQMD();
const gmo = new mq.MQGMO();

gmo.Options =
MQC.MQGMO_NO_SYNCPOINT |
MQC.MQGMO_MQWI_UNLIMITED |
MQC.MQGMO_CONVERT |
MQC.MQGMO_FAIL_IF_QUIESCING;
gmo.Options |= MQC.MQGMO_BROWSE_FIRST;

gmo.MatchOptions = MQC.MQMO_NONE;

mq.setTuningParameters({
getLoopPollTimeMs: 500 }); mq.Get(queueHandle, md, gmo, getCB); }



function getCB(err, hObj, gmo, md, buf, hConn) {
if (md.Format == "MQSTR") {
console.log(md);
const message = decoder.write(buf);
updateDB(getMetaFeed(message));
}
mq.Cmit(hConn);
}

gmo.Options &= ~MQC.MQGMO_BROWSE_FIRST;
gmo.Options |= MQC.MQGMO_BROWSE_NEXT; }

最佳答案

是的,当然可以。

您的应用程序可以获得一条消息,如果它是一条驱动需要完成的某些工作的消息,则可能使用同步点,执行该工作,然后当工作完成时提交该消息的获取,然后去获取下一条消息。如果需要完成的工作也是事务性的(例如更新数据库),则可以使用全局事务来同时提交 MQ 消息和其他事务性资源的更新。

您在问题中显示的代码似乎正在浏览消息(使用 MQOO_BROWSE 打开队列,然后使用 MQGMO_BROWSE_FIRST 读取消息,然后使用 MQGMO_BROWSE_NEXT)。我不确定您的应用程序当前如何或何时从队列中删除消息?

您当前的代码似乎已经在一一处理消息,因此唯一需要的更改是获取选项(并添加提交调用)。

关于javascript - IBM MQ 如何一条一条地读取消息,而不是一次性在队列管理器中提供所有消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59385177/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com