gpt4 book ai didi

oracle - 您能否确保任一时刻只有一个客户端连接到 Oracle AQ?

转载 作者:行者123 更新时间:2023-12-02 04:20:19 24 4
gpt4 key购买 nike

我们有一个 Oracle AQ 队列引发事件。

我们有 Java Oracle AQ 客户端处理这些事件。

出于灾难恢复的目的,我们有另一个始终关闭的客户端。但我们也遇到过灾难恢复练习让第二个客户端处于打开状态的情况,这导致我们损失了事件。

是否有任何方法以编程方式或使用配置来确保队列中只有唯一的订阅者。

最佳答案

有多消费者队列和单消费者队列。单个消费者队列没有订阅者。如果有访问权限,任何客户端都可以使用。但是,在解决您的问题时,您几乎没有选择,以下是按易于实现的顺序排列的:

选项 1:访问控制:

Oracle 支持在队列级别出队的访问控制。因此,如果用户不同,您可以将此访问权限授予单个用户

-> Application_A 使用 USER_A,并且只有 USER_A 有权从 QUEUE_A 进行消费

选项 2:使用多消费者队列:

如果您将队列配置为多使用者,并且有使用者订阅(您使用队列的任何应用程序的多订阅者)。在所有订阅者将其出队之前,该消息不会从队列中被消耗。因此,对于给定的消费者来说,消息不会丢失。这种发布-订阅模型有多种变体,您可以验证哪个更合适,但一般来说,消息仍然会在队列中,直到所有订阅者都消耗它或它超时(您也可以控制)

-> DR 和 Application_A 都订阅多消费者队列 QUEUE_MULTI。每个消费者(DR、Application_A)都可以使用(每个仅一次)消息 - 因为消息未过期。一旦所有消费者都消费完该消息,该消息就会出队

选项 3:使用队列传播:

定义一个多消费者队列以传播到另一个队列,只有一个队列可以从中出队。因此,接收到的消息将传播到其他队列(可以远程使用 DR 或其他应用程序)。消息将传播到队列,并在到达后标记为已被该队列消耗。直到所有消费者(包括其他队列)都消费完消息后,消息才被完全消费

-> DR 和 Application_A 都有自己的队列来消费这些消息。 (队列_DR、队列_A)。定义一个多消费者队列QUEUE_MULTI。 QUEUE_MULTI 传播到 QUEUE_DR 和 QUEUE_A 等。一旦消息传播到所有队列,无论相应队列 QUEUE_A、QUEUE_DR 中发生了什么,都会从 QUEUE_MULTI 消费该消息

关于oracle - 您能否确保任一时刻只有一个客户端连接到 Oracle AQ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33815693/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com