当前位置: 首页 > 知识库问答 >
问题:

GCP pub/sub:消息的生命周期

傅宏恺
2023-03-14

我试图了解GCP pub/sub,但我有一个关于pub/sub中消息生命周期的问题。事实上,我把这篇文章作为我的参考。在这篇文章中,他们说:

一旦每个订阅的至少一个订阅者确认了该消息,Pub/Sub就从存储中删除该消息。

所以我的第一个问题是:例如,我有一个订阅a,它连接到订阅者X和订阅者Y。根据文档,当订阅者X收到消息并向订阅者a发送ACK时,Pub/Sub将从存储中删除消息,而不考虑订阅者Y是否收到消息。换句话说,pub/sub并不关心是否所有订阅者都收到了消息,只有一个订阅者收到了消息,而pub/sub将从存储中删除消息?我说得对吗?

我觉得有点困惑。我的理解是,例如,我有一个主题有N个订阅,每个订阅有M个订阅者,pub/sub只需要知道对于每个订阅,至少有一个订阅者已经确认了消息,它就会从存储中删除消息。我说得对吗?

我还发现,在文档中,我们有两个概念:发布转发器和订阅转发器。所以我可以问最后几个问题:

  • 订阅、发布转发者和订阅转发者是什么关系?(例如,订阅只包含一个发布转发器和一个订阅转发器?)
  • 发布转发器和订阅转发器之间的关系是一对一或一对多或多对一或多对多,请?
  • 一个订阅服务器是否可以与多个订阅相关联?
  • 一旦订阅者使用了一条消息(这里我说的是该消息不是重复的,它没有副本,它是唯一的),该订阅者是否可能重新使用/重新读取该消息?

共有1个答案

韦鸣
2023-03-14

这里有很多东西要打开。最好不要把订阅看作是附加到订阅服务器上的,也要理解这两件事是不同的。订阅是希望接收发布到主题的所有消息的命名实体。订阅服务器是代表订阅运行以接收和处理消息的实际客户端。一个主题可以有许多订阅。一个订阅可以有许多订阅者。如果一个订阅中有多个订阅者,那么,假设没有重复的传递,并且订阅者ack所有接收到的消息,发布到主题的每个消息将被传递给该订阅的一个订阅者。这称为负载平衡:消息的处理分散在许多订阅服务器上。如果一个主题有多个订阅,每个订阅都有一个订阅者,那么每个订阅者将接收所有消息。这称为扇出:每个订阅服务器接收发布的完整消息集。当然,可以将这两者结合起来,并且每个订阅都有一个以上的订阅者,在这种情况下,每个消息将被传递给每个订阅的一个订阅者。

转发器只是负责传递消息的服务器。发布转发器从发布者接收消息,订阅转发器向订阅者发送消息。消息传递过程中的所有关系(从发布者到发布转发器、发布转发器到订阅转发器以及订阅转发器到订阅者)都可以是多对多关系。

订阅服务器与单个订阅相关联。但是,一个正在运行的作业可能有多个订阅服务器在其中运行,例如,一个可以在不同的订阅上多次实例化订阅服务器客户端库。

 类似资料:
  • 注:本文档提供的生命周期指的是 Universal App 的生命周期,它依赖 rax-app 提供的 runApp方法。 App 级生命周期 launch  在 App 启动时触发 使用生命周期 你可以使用 rax-app 提供的 useAppLaunch 来注册 App 级别的生命周期。 示例: import { useAppLaunch } from 'rax-app'; useAppLa

  • 我们大致为WebAPplication设计了4个生命周期: 请求初始化其实就是从URL中解析提取出{module}, {action}, {method}; 然后再根据{module}, {action}, {method}找到对应的Controller文件; 然后再调用对应的{method},完了之后再发送响应。当然响应的过程中肯定是要顺带着解析下模板标签啦。 恩,这就完了,貌似感觉很简单啊。

  • 如下图. 可以看出,基本周期是: created mounted updated (update 可以理解成人肉手动操作触发) destroyed 上面步骤中的 1,3,4都是自动触发。 每个步骤都有对应的 beforeXyz方法 所以, 我们一般使用mounted 作为页面初始化时执行的方法

  • 概览 组件的生命周期分为三个阶段:挂载、渲染、卸载,下图展示了解组件在整个生命周期中所涉及到的方法调用、原型方法调用和状态变化。 挂载阶段 从组件实例被创建再到被插入根组件树中,所经历的操作如下: 初始化组件实例。 根据组件类型绑定对应的原型。 调用 proto->init() 原型方法。 标记组件需要刷新全部样式。 因父组件变为另外一个组件,触发 link 事件。 更新阶段 当组件被插入到根组件

  • 框架生命周期 Hyperf 是运行于 Swoole 之上的,想要理解透彻 Hyperf 的生命周期,那么理解 Swoole 的生命周期也至关重要。 Hyperf 的命令管理默认由 symfony/console 提供支持(如果您希望更换该组件您也可以通过改变 skeleton 的入口文件更换成您希望使用的组件),在执行 php bin/hyperf.php start 后,将由 Hyperf\Se

  • Lifecycle 生命周期函数 用于监听游戏进入前台、后台、最大化、最小化、网络状态改变、游戏关闭、游戏分享事件。 取消监听需要传入和监听函数同一个回调函数。 BK.onEnterForeground(Function()) 监听游戏进入前台事件,手Q进程从后台回到前台 手Q版本:>7.6.5 示例: function enterForegroundListener(){ BK.Scri