我正在通过云功能向pubsub发送消息,并使用PubsubIO从全局窗口接收Java。有时从Java函数传递的消息很少从Java函数中提取(在我的情况下,错过了200个中的4个)。
我的云功能:
const PubSub = require('@google-cloud/pubsub');
const pubsub = PubSub();
exports.messagePublisher= function(event,callback) {
const file = event.data;
function publishMessage(){
console.log('Publishing message to Scheduler: '+file.name);
//Get Topic
const topic = pubsub.topic('projects/analytics-and-presentation/topics/newTestTopic');
var publisher = topic.publisher();
var message = "sampleText";
// Publishes a message
publisher.publish(new Buffer.from(message), (err) => {
if (err) {
console.log('Error occurred',err); publishMessge();
} else {
console.log('Message published');
}
});
}
if (file.resourceState === 'exists' && file.name) {
publishMessage();
}
callback();
};
我应该怎么做以确保没有任何消息被删除?
答案 0 :(得分:1)
消息很可能会被删除,因为它们被宣布为延迟数据。请参阅编程指南中的窗口和触发部分,尤其是Watermarks and late data,Handling late data和Default trigger (我强烈建议您完全从头开始阅读这些部分,而不仅仅是我链接的子部分
您可以将窗口/触发策略配置为更加宽松,哪些算作后期数据,或者根本不丢弃后期数据。
您可能还需要配置PubsubIO分配事件时间戳的方式。请参阅javadoc。