Lagom публикует события сущности в качестве источника для подключения через веб-сокет - PullRequest
0 голосов
/ 14 мая 2018

Возможно ли (и если да, то каким образом) публиковать поток обновлений сущностей напрямую (без какой-либо дополнительной темы), когда Source возвращается из службы, подобной этой?

public ServiceCall<NotUsed, Source<EntityPublicEvent, ?>> entityUpdates()

То, чего я пытаюсь добиться, - это использовать эти события в Angular 5 через websocket.

    @Override
        public ServiceCall<String, Source<EntityPublicEvent, ?>> getUpdateNotifications() {
            return request -> CompletableFuture.completedFuture(updatesTopic.subscriber().map(this::convertEvent));
        }

Я вижу, что в Angular подключается, и также вызывается служба для возврата источника, но обновления не отправляются как сообщения в Angular. В журналах также появляется эта строка, которая, как я полагаю, может быть причиной того, что я не могу получить какие-либо сообщения в Angular:

[info] akka.actor.RepointableActorRef [SourceThread = валюта осущий-приложения akka.actor.default-диспетчерскими-3, akkaTimestamp = 06: 59: 55.778UTC, akkaSource = Akka: // валюте осущ-приложение / система / распределенная PubSubMediator, sourceActorSystem = currency-impl-application] - Сообщение [tcs.currency.impl.CurrencyEvent $ Created] без отправителя Актер [Akka: // валюте осущ-приложение / система / distributedPubSubMediator # 128487187] не был доставлен. [1] встреченные мертвые буквы. Эта регистрация может быть выключен или настроен с помощью настроек конфигурации 'akka.log-dead-letters' и 'akka.log-dead-letters-во время выключения'.

1 Ответ

0 голосов
/ 15 мая 2018

Решено, в этом случае мой Angular-компонент создавал соединение, но не прослушивал сообщения. Я пытался начать с кода, приведенного здесь https://tutorialedge.net/typescript/angular/angular-websockets-tutorial/,, который является эхо-сервисом, а не просто слушателем.

С помощью этого простого кода я теперь могу получать сообщения об обновлениях:

let subject = Observable.webSocket('ws://localhost:9000/ws/api/currency/updates');
    subject
      .retry()
      .subscribe(
      (msg) => console.log('message received: ' + msg),
      (err) => console.log(err),
      () => console.log('complete')
      );
...