NodeJS Google Cloud Pub Sub在停止用户的所有事件后仍在发送通知

8fq7wneg  于 2023-06-22  发布在  Node.js
关注(0)|答案(1)|浏览(126)

在我的node服务器中,我获取用户的gmail收件箱权限,并使用google cloud的pub sub为所有这些权限添加一个监视器。
代码如下:

async addWatcherToGmailInbox({
    gmailInboxRefreshToken,
  }: {
    gmailInboxRefreshToken: string;
  }): Promise<boolean> {
    const auth = await this.loadAuth(gmailInboxRefreshToken);
    const gmail = google.gmail({
      version: 'v1',
      auth,
    });
    await gmail.users.watch({
      userId: 'me',
      requestBody: {
        labelIds: ['INBOX'],
        topicName: 'projects/<project-name>/topics/<topic-name>',
      },
    });
    return true;
  }

但是当用户从我的平台上取消他的gmail帐户时,我首先停止通知,然后撤销令牌。但不知何故,我仍然在我的pub sub subscriber on事件中收到通知。
停止通知代码:

async removeWatcherFromGmailInbox({
    gmailInboxRefreshToken,
  }: {
    gmailInboxRefreshToken: string;
  }): Promise<boolean> {
    const auth = await this.loadAuth(gmailInboxRefreshToken);
    const gmail = google.gmail({
      version: 'v1',
      auth,
    });
    gmail.users.stop({
      userId: 'me',
    });
    return true;
  }

我收到通知的发布订阅订阅者事件:

const pubsub = new PubSub({
      projectId: <project-name>,
    });

    this.logger.log('Google Pubsub initialized, fetching topics...');

    const subs = await pubsub.getSubscriptions();
    const sub = subs[0][0];

    // Receive callbacks for new messages on the subscription
    sub.on('message', (message) => {
      this.logger.log('Received message:', message.data.toString());

      const data = JSON.parse(message.data.toString());
    });

    // Receive callbacks for errors on the subscription
    sub.on('error', (error) => {
      this.logger.error('Received error:', error);
    });

当用户想要撤销令牌时,我缺少什么来停止通知。
注:我确实记录了停止函数的响应。它返回空的body,就像文档中提到的那样。

yruzcnhs

yruzcnhs1#

您可以停止在主题中发布消息,但订阅中仍有消息,PubSub会尝试传递它们,直到确认或消息过期。您也可以purge订阅

相关问题