如何在 Pubsub 上正确使用 nack?
How to use nack on Pubsub properly?
我正在从 Pubsub 中的主题收集消息。主要思想是对于我收到的每条消息都做一些逻辑(在数据库中插入一些东西)。
我的问题是这样的。
在我完成逻辑之后,我想放置一个 message.ack()
方法来告诉 pubsub “好的,这条消息已经完成了!”。
我的问题是我想去“黑暗面”,如果有人失败了,请在 message.nack()
上说“好的,pubsub,我们有问题,我不承认这条消息,所以让我们继续其余的
但是它一直抛出这个错误并且不继续处理其他消息。
我能做什么?
控制器:
@EventPattern('topicName')
async extractMessageTopic(msg: Message) {
try {
console.log("--Iniciando--");
await this.appService.extractMessageTopic(msg)
msg.ack() //Acknoledge the message
} catch (error) {
console.log("Error primera capa!", error);
msg.nack()//If any error, dont acknoledge
}
}
}
服务:
async extractMessageTopic(msg: Message) {
const buf = Buffer.from(msg.data)
const dataObject: any = JSON.parse(buf.toString())
console.log("Mensaje -> ", dataObject);
console.log("------------");
//Inserto En shipment
//const shipId = await this.shipmentRepositoryService.insert(dataObject)
//Inserto en Orders
//Inserto en Lines
}
谢谢!
在接收和处理消息的用例中实现的逻辑,如果它出错,您正在做 nack()
将导致无限次重新传递消息。 nack() 的行为是它会不断地重新传递消息,直到它没有被确认。
nack()
Removes the message from our inventory and schedules it to be redelivered.
我可以建议设置一个 dead-letter topic。它的作用是,如果消息在设定的截止日期内未被确认,它将重试多次。如果达到最大重试次数,消息将被发送到死信主题,并在达到设置的消息保留限制时清除消息。
我正在从 Pubsub 中的主题收集消息。主要思想是对于我收到的每条消息都做一些逻辑(在数据库中插入一些东西)。 我的问题是这样的。
在我完成逻辑之后,我想放置一个 message.ack()
方法来告诉 pubsub “好的,这条消息已经完成了!”。
我的问题是我想去“黑暗面”,如果有人失败了,请在 message.nack()
上说“好的,pubsub,我们有问题,我不承认这条消息,所以让我们继续其余的
但是它一直抛出这个错误并且不继续处理其他消息。
我能做什么?
控制器:
@EventPattern('topicName')
async extractMessageTopic(msg: Message) {
try {
console.log("--Iniciando--");
await this.appService.extractMessageTopic(msg)
msg.ack() //Acknoledge the message
} catch (error) {
console.log("Error primera capa!", error);
msg.nack()//If any error, dont acknoledge
}
}
}
服务:
async extractMessageTopic(msg: Message) {
const buf = Buffer.from(msg.data)
const dataObject: any = JSON.parse(buf.toString())
console.log("Mensaje -> ", dataObject);
console.log("------------");
//Inserto En shipment
//const shipId = await this.shipmentRepositoryService.insert(dataObject)
//Inserto en Orders
//Inserto en Lines
}
谢谢!
在接收和处理消息的用例中实现的逻辑,如果它出错,您正在做 nack()
将导致无限次重新传递消息。 nack() 的行为是它会不断地重新传递消息,直到它没有被确认。
nack()
Removes the message from our inventory and schedules it to be redelivered.
我可以建议设置一个 dead-letter topic。它的作用是,如果消息在设定的截止日期内未被确认,它将重试多次。如果达到最大重试次数,消息将被发送到死信主题,并在达到设置的消息保留限制时清除消息。