0

Ich schickte Nachrichten zu Pubsub von einer Wolke Funktionen und erhielt sie in Java von einem globalen Fenster mit PubsubIO. Manchmal erscheinen einige der Nachrichten, die von der Cloud-Funktion übergeben wurden, nicht, wenn sie aus Java gezogen werden (in meinem Fall wurden 4 von 200 verpasst).Nachricht löscht in PubSub

Meine Cloud Funktion:

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(); 
}; 

Was soll ich tun, um sicherzustellen, dass keine der Nachrichten gelöscht werden?

Antwort

0

Wahrscheinlich werden die Nachrichten gelöscht, weil sie als verspätete Daten deklariert wurden. Siehe das Windowing und auslösende Abschnitt in der Programmieranleitung, insbesondere Watermarks and late data, Handling late data und die Default trigger(Ich empfehle stark Anfang bis Ende der Abschnitte vollständig zu lesen, anstatt nur die Unterabschnitte I verknüpft)

Sie können konfigurieren, Ihre Fenster-/Trigger-Strategie sollte entweder toleranter sein, was als späte Daten zählt, oder die späten Daten überhaupt nicht fallen lassen.

Möglicherweise müssen Sie auch konfigurieren, wie Ihr PubSubIO Ereigniszeit-Zeitstempel zuweist. Siehe javadoc.