Lagom将实体事件发布为websocket连接的Source

时间:2018-05-14 20:05:49

标签: events websocket lagom

是否有可能(如果是,如何),直接发布实体更新流(没有任何其他主题)作为从这样的服务返回的Source?

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

我想要实现的是通过websocket在Angular 5中使用这些事件。

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

我可以在Angular中看到连接,并且还调用该服务以返回Source,但没有更新作为消息发送到Angular。 日志中也出现了这一行,我想这可能是我无法在Angular中收到任何消息的原因:

  

[info] akka.actor.RepointableActorRef   [sourceThread =货币IMPL - 应用 - akka.actor.default-调度-3,   akkaTimestamp = 06:59:55.778UTC,   akkaSource =阿卡://货币IMPL-应用/系统/分布   PubSubMediator,sourceActorSystem = currency-impl-application] - 消息   没有发件人的[tcs.currency.impl.CurrencyEvent $ Created]   演员[阿卡://货币IMPL-应用/系统/ distributedPubSubMediator#128487187]   没有交付。 [1]遇到死信。这个日志记录可以   使用配置设置关闭或调整   'akka.log-dead-letters'和'akka.log-dead-letters-during-shutdown'。

1 个答案:

答案 0 :(得分:0)

解决了,在这种情况下,我的Angular组件正在创建连接但没有侦听消息。我试图从这里提供的代码https://tutorialedge.net/typescript/angular/angular-websockets-tutorial/开始,这是一个echo服务而不仅仅是一个简单的监听器。

通过这个简单的代码,我现在能够收到更新消息:

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')
      );