邮件在PubSub中丢失

时间:2017-10-26 12:39:37

标签: google-cloud-dataflow google-cloud-functions google-cloud-pubsub

我正在通过云功能向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();
};

我应该怎么做以确保没有任何消息被删除?

1 个答案:

答案 0 :(得分:1)

消息很可能会被删除,因为它们被宣布为延迟数据。请参阅编程指南中的窗口和触发部分,尤其是Watermarks and late dataHandling late dataDefault trigger (我强烈建议您完全从头开始阅读这些部分,而不仅仅是我链接的子部分

您可以将窗口/触发策略配置为更加宽松,哪些算作后期数据,或者根本不丢弃后期数据。

您可能还需要配置PubsubIO分配事件时间戳的方式。请参阅javadoc