跳到主要内容

配置分区队列

如果您的事件驱动架构(EDA)使用动态微服务扩展来适应消息负载,使用分区队列可以确保具有相似上下文的消息始终由相同的消费者处理.

分区队列由一个父非独占队列和每个分区的一个子队列组成.父队列保存分区队列的配置状态,包括订阅集和分区的组合消息配额.父队列不保留消息,也不消耗任何配额.

事件代理根据消息中携带的键(分区键)在分区队列的分区之间分配消息.发布应用程序在创建消息时设置此键.事件代理对分区键进行哈希处理,并使用以下计算选择特定消息集的目的分区:

partition = partition-key-hash MOD partition-count

分区键与其目的分区之间的这种关系称为 键到分区映射.具有相同键的所有消息都由同一个分区处理.如果没有设置分区键,则事件代理生成一个随机哈希值,这会导致消息被转盘到一个随机分区.

消费应用程序绑定到分区队列并像处理其他任何队列一样消费消息.事件代理将一个或多个分区映射到每个消费者流.这称为 分区到流映射.

消息序列在分区内部得到保持,但不在分区之间保持.

有关代理如何处理分区队列中的消息的详细信息,请参阅分区队列的消息分配.

分区队列需要事件代理版本 10.4 或更高版本.

创建分区队列锚点

要创建分区队列,请执行以下步骤:

  1. 打开事件代理管理器.有关说明,请参阅 PubSub+ 事件代理管理器.

  2. 选择一个消息 VPN.

  3. 在左侧导航栏中选择 队列.

  4. 点击 + 队列.

    img

  5. 输入队列的名称,然后点击 创建.

  6. 为队列设置适当的选项.有关队列设置的更多信息,请参阅创建队列.要创建分区队列,请设置以下选项:

选项描述
访问类型将访问类型设置为 非独占.
分区数指定队列的分区数.您应该将分区数设置为您预期可能绑定到队列的最大活动消费者数.
  1. 点击 显示高级设置.

  2. 设置以下分区重新平衡选项:

选项描述
重新平衡延迟指定在由消费者数量变化触发重新平衡活动之前,允许消费者数量稳定化的延迟秒数.如果在延迟计时器过期之前消费者数量恢复到之前的状态,则不会发生分区交接.
默认情况下,事件代理在需要时等待五秒钟才会触发重新平衡.您可以配置延迟以平衡您的消费者扩展策略需求和消费者连接的稳定性.较小的值意味着客户端连接和断开连接的响应速度更快;较大的值可以最小化当客户端频繁临时断开连接或当客户端断开/重新连接成组发生时(例如,使用客户端自动扩展时)的分区重新分配次数.
重新平衡最大交接时间指定事件代理服务在分区交接期间等待消费者确认未决消息的最大秒数.
当分区重新平衡发生时,可能会导致分区从一个消费者交接到另一个消费者.虽然交接旨在尽可能不引人注意,但分区的重新映射和扩展可能会导致应用程序级别的错误,因为属于一个分区的消息流从一个消费者移动到另一个消费者.有关更多信息,请参阅分区交接.
默认情况下,事件代理在重新平衡期间暂停消息进入最多三秒钟,以便在交接分区之前让消息排空.如果没有消息需要排空,则交接立即进行.
  1. 点击 应用.

在队列中添加和移除分区锚点

如果您重新设计应用程序或 EDA 的其他方面,或者如果新信息改变了连接到队列的最大活动消费者数量的预测,则可能需要通过分区扩展来添加或移除分区.

分区扩展指的是向分区队列添加分区或从分区队列移除分区.当管理员更改队列的分区数时,会触发分区扩展.

当分区数减少时,事件代理按创建顺序的相反顺序移除多余的分区(即,先移除编号最高的分区).删除的分区中剩余的任何消息也会被删除.

当分区数增加时,事件代理为每个新分区分配序列中下一个最高的分区号.

分区扩展会触发事件代理上的分区重新平衡过程.分区交接的影响也适用于分区扩展.

在某些情况下,将一些消息负载转移到另一个分区队列或配置一个具有更多分区的新分区队列,可能比更改现有分区队列的配置更可取.

当分区数发生变化时,键到分区的映射也会发生变化.其效果是消费者接收到的消息集与之前不同.由于对消费者的影响,我们建议在更改分区数量之前禁用分区队列的进入,以便所有现有分区中的消息排空.

向队列添加分区锚点

要向队列添加额外的分区,请执行以下步骤:

  1. 打开事件代理管理器.有关说明,请参阅 PubSub+ 事件代理管理器.

  2. 选择一个消息 VPN.

  3. 在左侧导航栏中选择 队列.

  4. 点击您要更新的队列.

  5. 点击 编辑img.

  6. 点击 入站img 切换按钮以禁用入站消息.

  7. 等待队列所有分区的所有未决消息完全传递;即,队列的 消息队列 值为零.

  8. 分区数 字段中,增加分区数.

  9. 等待事件代理分配新分区并完成分区重新平衡,即,队列的 重新平衡状态 值为 就绪.

  10. 点击 入站img 切换按钮以重新启用入站消息.

  11. 点击 应用.

从队列中移除分区锚点

如果绑定到队列的最大活动消费者数始终略小于或等于分区数,则无需更改分区数.但是,如果您确实需要减少队列中的分区数量,请执行以下步骤.

  1. 打开事件代理管理器.有关说明,请参阅 PubSub+ 事件代理管理器.

  2. 选择一个消息 VPN.

  3. 在左侧导航栏中选择 队列.

  4. 点击您要更新的队列.

  5. 点击 编辑.

  6. 点击 入站 切换按钮以禁用入站消息.

  7. 等待队列所有分区的所有未决消息完全传递;即,队列的 消息队列 值为零.

  8. 分区数 字段中,减少分区数.

  9. 等待事件代理分配新分区并完成分区重新平衡,即,队列的 重新平衡状态 值为 就绪.

  10. 点击 入站 切换按钮以重新启用入站消息.

  11. 点击 应用.