在Google PubSub中,PubSub. subscriptions()和Topic.getSubscriptio



我创建了一个使用Google PubSub NodeJS SDK处理PubSub消息传递的程序。在开发这个时,我注意到NodeJS库和文档显示了在Google PubSub中检索活跃订阅的两种方法:

  1. PubSub.subscriptions('SubscriptionName')docs
  2. PubSub.topic('TopicName).getSubscriptions()docs

我知道第二个选项可能只列出与某个主题相关的订阅,但我对幕后的工作更感兴趣。

在我的第一次尝试中,我使用了第二个选项来检索我的订阅,并且在运行应用程序时工作,但是当我试图在单元测试中模拟调用时,我遇到了超时,我无法修复它。我切换到第一种方法,它不使用Promise,只返回一个普通的Subscription对象,这在我的单元测试中工作得很好

不使用基于承诺的调用是否有缺点,因为它可能无法产生最新的结果?如果不是,为什么有两个选择,一个是基于承诺的,另一个不是?

这两个api做的事情非常不同。第一个方法在客户机中创建一个Subscription对象,该对象可用于接收消息。它不从Cloud Pub/Sub服务检索任何状态。因此,没有异步工作要做,也不需要返回承诺。第二个实例实际上转到Cloud Pub/Sub服务,检索主题的订阅列表,并为每个订阅创建一个Subscription对象。

如果您知道想要接收消息的订阅的名称,并且可以合理地确信它存在,则使用PubSub.subscriptions('SubscriptionName')。如果您尝试通过调用subscription.on('message', messageHandler);在此订阅上开始接收消息,而它不存在,则会发出一个错误。

如果您不知道订阅的名称,而是需要获取列表并选择从该主题的所有订阅列表中接收消息的订阅,则使用PubSub.topic('TopicName).getSubscriptions()调用。

要进一步了解为什么模拟getSubscriptions()调用不起作用,可能需要查看您用来模拟它的代码。

最新更新