是否有可能(如果是,如何),直接发布实体更新流(没有任何其他主题)作为从这样的服务返回的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'。
答案 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')
);