我在angular项目中使用过ngx-mqtt。还有另一个项目创建数据,并发送数据到特定的topic.When我从角度应用程序订阅这个主题,我总是从订阅时获得数据,无论哪个数据后来发布到主题。我没有得到旧数据,数据源在我订阅主题之前发布到主题。
例如)数据源创建了1到10个数据,如1,2,3,4,5,6,7,8,9,10新订阅者在发出5个数据点后添加到topic(如果我订阅,则使用angular应用程序)。我从6(6,7,8,9, 10 )中获取数据,但我需要从1到10的数据
当我订阅任何新的主题时,如何从主题中获取所有数据
这是mqtt的默认行为方式吗?
在angular,我听说过热和冷的可观测性。有没有可能让mqtt表现为冷可观察?(只要订阅了新订阅者,就发送所有数据)
发布于 2020-02-26 16:03:20
使用shareReplay()
运算符,对于这种情况,所有延迟订阅都将获得发出的所有值。https://www.learnrxjs.io/learn-rxjs/operators/multicasting/sharereplay
发布于 2020-02-26 23:25:01
MQTT将只为具有持久会话的客户端排队数据(有关持久会话的详细信息,请参阅HiveMQ博客post )。
这意味着客户端需要已经连接到代理,并在QOS1或QOS2订阅了相关主题。
当它重新连接时,它需要使用相同的客户端id,并确保clean会话标志设置为false。
MQTT是发布/订阅协议,而不是通用的消息队列系统。
https://stackoverflow.com/questions/60408981
复制相似问题