如何判断AQjmsDestination对象的入队与出队启用状态?
判断Oracle 12c AQ队列的入队/出队启用状态
我之前也碰到过类似的需求,刚好Oracle AQ的JMS API提供了对应的方法来获取这些状态,下面是具体的实现方式:
核心思路
AQjmsDestination作为队列的父类,实际对应队列实例是AQjmsQueue,我们可以通过获取队列的属性对象AQjmsQueueProperty,从中提取入队和出队的启用状态——这正是你调用queue.start()方法时设置的两个参数对应的属性。
代码示例
// 假设你已经持有AQjmsDestination实例和对应的AQSession AQjmsDestination dest = ...; // 你的目标队列对象 AQSession q_sess = ...; // 已创建的AQ会话 if (dest instanceof AQjmsQueue) { // 强转为AQjmsQueue(因为我们操作的是队列,不是主题) AQjmsQueue queue = (AQjmsQueue) dest; // 获取队列属性 AQjmsQueueProperty queueProps = queue.getQueueProperties(q_sess); // 获取入队启用状态 boolean isEnqueueEnabled = queueProps.getEnqueueEnabled(); // 获取出队启用状态 boolean isDequeueEnabled = queueProps.getDequeueEnabled(); // 输出或使用状态值 System.out.println("当前队列入队状态: " + (isEnqueueEnabled ? "已启用" : "未启用")); System.out.println("当前队列出队状态: " + (isDequeueEnabled ? "已启用" : "未启用")); }
补充说明
- 如果你需要通过数据库层面验证,也可以查询Oracle的系统视图:
- 查询
USER_QUEUES(当前用户的队列)或ALL_QUEUES(有权限的所有队列),其中ENQUEUE_ENABLED和DEQUEUE_ENABLED列的值Y/N就代表对应状态。 - 示例SQL:
SELECT ENQUEUE_ENABLED, DEQUEUE_ENABLED FROM USER_QUEUES WHERE QUEUE_NAME = '你的队列名称';
- 查询
- 注意
getQueueProperties()方法需要传入有效的AQSession,因为它需要和数据库交互获取最新的队列状态。
内容的提问来源于stack exchange,提问作者kc2001
相关产品推荐
相关产品推荐

