Google cloud platform 为什么消息没有';不需要重新交付吗?

Google cloud platform 为什么消息没有';不需要重新交付吗?,google-cloud-platform,google-cloud-pubsub,Google Cloud Platform,Google Cloud Pubsub,确认截止时间为10秒。当我使用异步拉方式处理消息时,我不会调用message.ack()和message.nack(),等待消息确认截止日期,并期望Pub/Sub重新传递此消息 等待超过10秒后,订户不再收到消息。这是我的密码: 订户: 从'../../googlePubsub'导入{pubsubClient,IMessage,parseMessageData}; 从“../../utils”导入{logger}; const topicName='异步拉测试'; const subName=‘

确认截止时间为10秒。当我使用异步拉方式处理消息时,我不会调用
message.ack()
message.nack()
,等待消息确认截止日期,并期望
Pub/Sub
重新传递此消息

等待超过10秒后,订户不再收到消息。这是我的密码:

订户

从'../../googlePubsub'导入{pubsubClient,IMessage,parseMessageData};
从“../../utils”导入{logger};
const topicName='异步拉测试';
const subName=‘异步拉动测试’;
constsubscription=publisubclient.topic(topicName).subscription(subName);
const-onMessage=(message:IMessage)=>{
const{data,…rest}=消息;
const jsonData=parseMessageData(数据);
debug('receivemessage',{参数:{…rest,数据:jsonData}});
const publishTime=新日期(message.publishTime.getTime();
const republishtimstamp=Date.now()-5*1000;
if(publishTimelogger.error(err));
publisher

const topicName='asynchronous pull test';
异步函数main(){
const messagePayload={email:faker.internet.email(),活动ID:'1'};
等待发布(topicName,messagePayload);
}
main();
我正在使用
“@googlecloud/pubsub”:“^0.19.0”,


我预计订户将在确认截止日期10秒后再次收到该消息。这意味着我的订户每10秒接收并处理一次消息。我错了吗

您应该取消该消息,让发布/订阅重新传递该消息

您应该取消该消息,让发布/订阅重新传递该消息

谷歌云发布/订阅客户端库会自动调用在可配置的时间段内既没有确认也没有确认的消息。在node.js中,通过以下属性进行配置:

const options = {
  flowControl: {
    maxExtension: 60, // Specified in seconds
  },
};

const subscription = pubsubClient.topic(topicName).subscription(subName, options);

一般来说,不将ack/nack消息作为延迟其重新传递的手段不是一种好的做法。这将导致消息仍按最大未完成消息计数,这意味着它可能会阻止未来消息的传递,直到最初收到的消息得到确认或确认。目前,云发布/订阅没有延迟消息重新传递的方法,但这是一个正在考虑的问题。

谷歌云发布/订阅客户端库会自动调用在可配置的时间段内既没有确认也没有确认的消息。在node.js中,通过以下属性进行配置:

const options = {
  flowControl: {
    maxExtension: 60, // Specified in seconds
  },
};

const subscription = pubsubClient.topic(topicName).subscription(subName, options);

一般来说,不将ack/nack消息作为延迟其重新传递的手段不是一种好的做法。这将导致消息仍按最大未完成消息计数,这意味着它可能会阻止未来消息的传递,直到最初收到的消息得到确认或确认。此时,Cloud Pub/Sub没有延迟消息重新传递的方法,但它正在考虑中。

使用CLI查看消息是否仍然存在
gcloud pubsub订阅拉异步拉测试
。要使用gcloud确认消息,请添加
--自动确认
。我找不到描述消息重新传递频率的文档。为了进行测试,您还可以将消息推送到主题上。这将再次触发您的代码
gcloud pubsub主题发布异步拉动测试--消息“Hello world”
使用CLI查看消息是否仍然存在
gcloud pubsub订阅拉动异步拉动测试
。要使用gcloud确认消息,请添加
--自动确认
。我找不到描述消息重新传递频率的文档。为了进行测试,您还可以将消息推送到主题上。这将再次触发您的代码
gcloud pubsub主题发布异步拉动测试——消息“Hello world”
call
message.nack()
可以告诉
Pub/Sub
重新传递它。但是我的订户消息处理程序将立即收到消息。这太快了,因为现在不是确认消息的时候。如您所见,消息应在5秒后确认。我想
Pub/Sub
5秒后重新提交。可能吗?我想这不可能。您无法控制在最后期限到期后发布/订阅何时重新传递邮件。这也不能保证邮件不会在最后期限内重新发送,文档说明“尽最大努力”调用
message.nack()
可以告诉
Pub/Sub
重新发送。但是我的订户消息处理程序将立即收到消息。这太快了,因为现在不是确认消息的时候。如您所见,消息应在5秒后确认。我想
Pub/Sub
5秒后重新提交。可能吗?我想这不可能。您无法控制在最后期限到期后发布/订阅何时重新传递邮件。文件称,这也不能保证邮件不会在截止日期内重新送达