问题标签 [advanced-queuing]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
21 浏览

sorting - 根据服务集(服务 A、服务 B、服务 B、服务 C)对队列进行排序

我有一个排序队列与服务集方面的问题,队列包含3种不同服务(服务A,服务B,服务C)的元素类型,现在我需要以服务集(A,B)的形式对队列进行排序,公元前)。像一个数组 = { 服务 A,服务 B,服务 B,服务 C,服务 A,服务 B,服务 B,服务 C,...}

我想以相同的顺序删除和添加新元素..

如果一个元素被删除,它不应该替换相同类型的元素,但它应该调出下一个放置的元素就像我删除了服务 A 结果应该是数组 = { 服务 B,服务 B,服务 C,服务 A,服务 B ,服务 B,服务 C,...}

当前的问题是在对队列进行排序之后,一旦从队列中删除了一个元素,它应该移动到集合的下一个元素,但它会带来与我删除的相同类型的元素

0 投票
0 回答
885 浏览

plsql - 将 ORACLE AQ 中的异常队列出列

我是 Oracle AQ 流程的新手,对异常队列有一些疑问。这是我的场景:

Oracle Database 19c 企业版 19.0.0.0.0 版

创建表和队列:

据我了解,它应该以 30 分钟的延迟重试出列 6 次,然后发送到异常队列。但就我而言,它确实将消息发送到异常队列很多。我希望您的输入知道我是否遗漏了什么或做错了什么。

入队:

出队:

当我执行入队时,如果应用程序出现故障或出于任何其他原因,消息将进入异常队列。如果我从异常队列中出列,是否需要在出列过程中提及(XYZ_PACKAGE.ABC_API (MESSAGE.HN_TXN_SEQ); ---- CALL API ----),否则它将像正常队列出列过程一样自动调用.

异常队列:

执行上述操作后,它会从异常队列中删除消息。我需要在两者之间的任何地方提及( XYZ_PACKAGE.ABC_API (MESSAGE.HN_TXN_SEQ); ---- CALL API ----) 吗?

执行异常队列还是使用 max_retries 和 retry_delay 更好?

如果消息移动到异常队列,并且如果我运行查询以使它们出列。它们是否遵循与普通队列出列相同的机制并执行使用消息作为输入的任何其他 API?

谢谢!

0 投票
1 回答
294 浏览

oracle - Oracle Advance Queue Dequeue 回调不起作用

我有 2 个模式:(A 和 B)在模式 A 中,我创建了提前队列和出队回调函数。从模式 AI 授权模式 B 执行入队过程。当我将模式 A 中的数据排入队列时 -> 一切正常。当我从模式 B 调用 A.enqueue 数据过程时 -> 数据已入队,但它们仍处于 READY 状态...。出队回调函数未触发。这是测试脚本:

我有用户 A

我看到记录处于就绪状态:

从 aq$event_queue_tab 中选择 *;

为什么这样......我做错了什么?

0 投票
1 回答
44 浏览

oracle - Oracle 高级队列与小型 Oracle 数据库表

我正在寻找一种在两个数据库之间进行通信的简单方法,两个数据库之间目前存在一个数据库链接。

我想在数据库 1 上处理一批记录的作业(每批记录的批处理代码),一旦数据库 1 上的过程完成并且所有批次的记录都已处理。我希望数据库 2 通过查询位于数据库 1 或数据库 2 上的 oracle 表或 Oracle 高级队列来查看数据库 1 已处理多个批次(批次代码)。

数据库 2 将使用每个批处理代码通过数据库链接视图处理数据库 1 上的记录批次,并更新该批次的状态以完成。

我希望能够更新其批号、进度状态('S' 开始、'C' 完成)、状态日期的 Oracle 高级队列或数据库表

表名。

表格列

问题:

  1. 这可以通过一个简单的数据库表而不是复杂的 Oracle 高级队列来完成吗?

  2. 可以通过数据库链接更新表吗?

  3. 有这方面的例子吗?

0 投票
1 回答
136 浏览

java - 无法将大于 2000 字节的 LOB 作为缓冲消息排队到 Oracle AQ

我正在尝试将 JMS-Bytes-Message ( AQ$_JMS_BYTES_MESSAGE) 作为缓冲消息排入 Oracle AQ 并使用 Java JMS 读取它。要发送消息,我使用以下 PL/SQL 代码:

只要有效载荷不超过 2000 个字符,它就可以正常工作。一旦有效负载大于 2000 个字符(如 2001),我就会收到以下 SQL 错误: ORA-25293: Lob attributes must be null for buffered operations.

将 AQ 交付模式设置为从DBMS_AQ.BUFFERED到时,DBMS_AQ.PERSISTENT它适用于任何尺寸。

根据 Oracle 文档(Enqueuing Buffered Messages),它指出:

缓冲消息的队列类型可以是 ADT、XML、ANYDATA 或 RAW。对于具有 LOB 属性的 ADT 类型,只能将具有空 LOB 属性的缓冲消息排入队列。

使用的类型显然是 ADT(JMS 类型)。

有谁知道通过 Oracle AQ 发送缓冲 JMS 消息的解决方案?

0 投票
1 回答
561 浏览

java - Oracle AQ java实现enque/deque

过去几天,我一直在互联网上搜索任何正在运行的 Oracle 高级队列示例实现,用于消息的 enque/deque,但没有任何成功。

我试图遵循规范中提到的 oracle 文档,但对我来说还不清楚。

  • 它没有任何关于公开可用的依赖项(maven/gradle)的信息。[我知道我需要使用aqapi.jar ]。与我正在使用的 jdbc 驱动程序兼容的任何特定版本。

  • 我也在为此使用 c3p0 连接池,并为 c3p0 寻找开箱即用的AQSession支持,以避免从代码角度进行连接和会话处理。

注意:队列表和队列已经从数据库层设置。我只是想为消息委托编写一个生产者/消费者。我们正在使用 oracle 12c 和 Java 11。

任何类型的信息将不胜感激。

0 投票
2 回答
194 浏览

oracle - 使用 Oracle Advanced Queues 监视数据库表列何时更新

环境:Oracle 12c

我是 Oracle 高级队列 (AQ) 的新手,看起来它应该是最好的方法,而不是轮询。

基于此,我想利用 AQ 基于以下触发器来使用:

因此,不是在更新 STATUS 列时进行轮询,是否可以使用 AQ 提供某种类型的 CALLBACK 功能?

我基本上需要一种知道何时更新 STATUS 列的方法,以便在发生这种情况时执行一些其他操作。

0 投票
1 回答
555 浏览

oracle - Oracle 高级队列 - 丢失消息和最佳调试方法

环境:Oracle 12c

我目前有一个 Oracle Advanced Queue 系统设置如下:

我还注册了一个调用 PL/SQL 包过程的回调。

出于某种原因,我似乎遇到了丢失消息或消息未出队的情况。

基于此,我有以下问题:

  1. 我是否正确设置了我的实际队列 - 带有 MAX_RETRIES 和其他信息的 MY_WORK_Q?
  2. 有没有办法检查已排队的消息?
  3. 有没有办法检查已经出队的消息?
  4. 有没有办法检查 EXCEPTION_QUEUE/Exception 表以查看丢失的消息是否已到达那里?

我只是不明白为什么我在排队系统中丢失了消息,以及我可以检查什么以查看可能导致问题的原因。

我还将我的 MAX_RETRIES 增加到 100,但似乎仍然存在问题。

更新

好像我得到了error ORA-25263: no message in queue.

我不确定这是否与 dbms_aq.enqueue 或 dbms_aq.dequeue 调用的时间问题有关,但在 dbms_aq.dequeue 我有这个设置:

我需要说 10 秒的等待而不是 no_wait 吗?我不确定这是否可能以及是否需要在入队或出队步骤上等待。

0 投票
1 回答
196 浏览

c# - 使用带有 MSGID 的 ODP.NET 使 Oracle AQ 出队

我正在尝试通过服务使用 ODP.NET 将来自 oracle AQ 的消息出列

我有两个条件

  1. 要出列的队列表中记录的消息ID将由服务提供
  2. 一旦服务出列该记录的消息不应该可用于其他服务实例,意味着它应该被锁定直到事务提交或事务过期

问题 :

  1. DequeueOptions MsgID 无法识别我的 MSGID
  2. 找不到如何锁定其他实例以使相同的 msg ID 出列

我的队列就像

有人可以建议我一种方法来传递记录的 msgid 以从队列中出列以及如何将它们与其他访问它的人锁定直到提交或超时

0 投票
1 回答
86 浏览

c# - Oracle Advanced Queue 的消息状态在使用 ODP.net 出队后未更新

我正在尝试通过服务使用 ODP.NET 将来自 oracle AQ 的消息出列

一旦 Service Dequeue 消息,该记录不应该可用于其他服务实例,这意味着它应该被锁定直到事务提交或事务过期

我的问题是我能够成功地将记录出列,但消息状态没有从就绪状态更新到任何其他状态,我也能够获取有效负载数据

我的队列就像

有人可以建议我做错了什么