Подписчики темы могут ничего не получить, пока не будет опубликовано обновление

Я строю систему публикации цен на финансовые инструменты. Некоторые инструменты обновляются несколько раз в секунду, а некоторые обновляются реже. Независимо от частоты обновления, все подписчики должны видеть последнее обновление или текущую цену этого инструмента.

Подписчик может подождать некоторое время, прежде чем увидит обновление темы по всем темам, оставив свой взгляд на более медленные темы пустым. Я мог бы использовать SessionPropertiesListener прислушиваться к новым членам аудитории, а затем обновлять каждую тему с текущими ценами, но это создает много шума для существующих членов аудитории, и кажется, что хвост виляет собакой.

Я могу проиллюстрировать мою проблему с медленно обновляющейся темой:

#!/usr/local/bin/node
var diffusion = require('diffusion');

const diffHost = "localhost";
const exampleTopic = "some/counter";

diffusion.connect({
    host : diffHost,
    port: 8080,
    secure: false,
    principal : 'admin',
    credentials : 'password',
}).then(function(session) {
    console.log('Connected to %s', diffHost);

    var count = 0;
    session.topics.add(exampleTopic).then(function(result) {
        console.log("Created %s", exampleTopic);
        setInterval(function() {
            session.topics.update(exampleTopic, ++count);
            console.log("Updated %s to %d", exampleTopic, count);
        }, 5000);
    }, function(error) {
        console.log('Topic add failed: ', error);
    });
});

Любой, кто подписывается на some/counter будет ждать в среднем 2,5 с, прежде чем что-либо увидеть. Я чувствую, что здесь не хватает хитрости, как я могу гарантировать, что подписчик эффективно получит текущую цену, как только он подпишется на нее?

1 ответ

Решение

Ваша тема some/counter не имеет состояния, что объясняет, почему новые подписчики ничего не получают до того, как оно будет обновлено. Вместо создания вашей темы:

session.topics.add(exampleTopic)

Заменить его на:

session.topics.add(exampleTopic, count)

... создать государственную тему.

Другие вопросы по тегам