[英]GCP PubSub ordering does not order messages
我正在尝试将 GCP pubsub 排序功能与节点 js 一起使用。 我正在发送几条具有相同排序键的消息,在第一条消息得到确认后,我收到了一堆中的所有其他消息,但没有按顺序接收。 您可以在屏幕上看到该行为。 看看时间戳。 为什么会这样? 据我了解,在确认前一条消息后,我应该只收到另一条消息。 结果
发布消息的代码:
const main = async () => {
const pubSubClient = new PubSub()
const keys = ['a', 'a', 'a']
for (let i = 0; i < keys.length; ++i) {
console.log(chalk.green(`Sending message ${i + 1}, ordering key - ${keys[i]}`))
await pubSubClient
.topic('test-topic', { messageOrdering: true })
.publishMessage({
orderingKey: keys[i],
data: Buffer.from(`Msg ${i + 1}`)
})
}
}
拉取消息的代码:
const main = async () => {
const pubSubClient = new PubSub()
const handleMsg = async (message: Message) => {
const dataStr = Buffer.from((message.data as unknown) as string, 'base64').toString('utf-8')
console.log(chalk.green(`Got message ${dataStr}, orderingKey - ${message.orderingKey}, ${new Date().toISOString()}`))
// some processing happens here
await sleep(10000)
console.log(chalk.yellow(`Message ack ${dataStr}, orderingKey - ${message.orderingKey}, ${new Date().toISOString()}`))
message.ack()
}
const subscription = pubSubClient.subscription('test-subscription')
subscription.on('message', handleMsg)
console.log('started listening...')
}
该过程运作良好。 没有问题或问题。
您的程序是连接到 PubSub 订阅的订阅者。 一个订阅可以有多个订阅者。 因此,PubSub 向一个订阅者发送第一条消息(在您的情况下是唯一一个,但 PubSub 不知道这一点)。
第一条消息很好地确认了该“订阅者”,PubSub 选择传递其他消息。 为了优化网络,PubSub 将消息批量传递给客户端(这就是为什么你有相同的时间戳)。 但是,消息在您的程序中按顺序处理; PubSub 客户端库确保该顺序。
在一天结束时,您会收到所有消息并按顺序处理它们。 任务完成。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.