标签: advanced-queuing

显示Oracle AQ SYS.AQ $ _JMS_TEXT_MESSAGE的内容

我有一个使用JMS op Oracle Oracle高级排队的应用程序.我想对队列表进行查询,该查询显示消息的内容(在我的例子中是XML).因此,当我从[queue_table]中选择'select user_data'时,我得到'AQ SYS.AQ $ _JMS_TEXT_MESSAGE'作为回复.

是否有一个功能,以便显示此消息的内容?像[queue_table]'中的'select FUNCTION(user_data)'之类的东西?

我用Google搜索,扫描了许多关于排队的Oracle文章,但我找不到这个东西.我怀疑有一种简单的方法可以做到这一点,但我找不到它.

oracle jms advanced-queuing

13
推荐指数
2
解决办法
2万
查看次数

Oracle Streams和Change Data Capture有什么区别?

有几种类似的Oracle技术 - Oracle Streams,Oracle Change Data Capture和Database Change Notification.

这些有什么区别?

它们与Oracle Advanced Queuing有关吗?

oracle cdc change-data-capture advanced-queuing oracle-streams

12
推荐指数
1
解决办法
2万
查看次数

如何将Spring Boot JMS从ActiveMQ迁移到Oracle Advanced Queuing

我正在研究Spring Boot和JMS的例子,是的,我对此很新

由于我们使用Oracle,因此我想将Spring Boot和JMS示例从ActiveMQ迁移到Oracle Advanced Queuing.但是我真的很少发现这方面的信息.

据我所知,我需要为Oracle版本替换下面的代码,但我没有设法找到方法.

@Bean
public JmsListenerContainerFactory<?> myFactory(ConnectionFactory connectionFactory,
                                                DefaultJmsListenerContainerFactoryConfigurer configurer) {
    DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
    // This provides all boot's default to this factory, including the message converter
    configurer.configure(factory, connectionFactory);
    // You could still override some of Boot's default if necessary.
    return factory;
Run Code Online (Sandbox Code Playgroud)

}

原始代码可以在Github找到

非常感谢帮助!

java oracle advanced-queuing spring-jms spring-boot

9
推荐指数
1
解决办法
4630
查看次数

SQL Server是否具有类似于Oracle Streams Advanced Queuing的功能?

Oracle Streams AQ(高级队列)提供高度可扩展的数据库支持的排队功能.SQL Server(任何版本)中是否存在等效功能?

注意:我并不是简单地将表用作队列,而是使用特定的供应商提供的数据库平台增强功能.

sql-server oracle queuing advanced-queuing

7
推荐指数
1
解决办法
2096
查看次数

按照Camel和JMS的高级队列以正确的顺序使用消息

我将Apache Camel与Oracle Advanced Queues和JMS结合使用时遇到了问题.

它是关于分发消息的应用程序.在Camel的帮助下,消息在Oracle Advanced Queues中接收并入队.然后将它们与Camel一起使用并转发到目标系统.对于消息传递失败的情况,高级队列中定义了重试计数,以便重复传递消息.

如果Camel现在将消息出列并将其发送到不可用的目标系统,则抛出HttpOperationFailedException或NoSuchEndpointException.这些被捕获并且执行了回滚.

此时,期望消息传递将按照重试计数中定义的频率重试,然后移动到异常队列.但是,发生的事情是队列中的下一条消息是发送的.

由于消息的内容部分地相互依赖,因此必须按顺序处理它们.

我认为JMS库的使用存在错误配置,但我不确定并且没有发现任何可以影响此行为的内容.

使用的JMS库是Oracle AqApi v 11.2.0.3.

以下是Camel路线的代码:

from("jms-camel-component:myComponent.AQ?jmsMessageType=Text").routeId("deliveryToTarget")
        .transacted()                
        .setExchangePattern(ExchangePattern.InOut)                        
        .setHeader(Exchange.HTTP_QUERY, constant("throwExceptionOnFailure=false"))
        .setHeader(Exchange.CONTENT_TYPE, constant("application/xml; charset=UTF-8"))
        .doTry()
            .recipientList(header("endpointTarget"))
            .endDoTry()
            .process(ResponseProzessor.getInstance())
            .log("Message was delivererd.")
        .doCatch(HttpOperationFailedException.class, NoSuchEndpointException.class)    
            .process(ResponseProzessor.getInstance())
            .log("Error occured.")
            .rollback()
        .end();
Run Code Online (Sandbox Code Playgroud)

这是JmsComponent配置:

JmsComponent jmsComponent = new JmsComponent(scc);
jmsComponent.setConnectionFactory(connectionFactory);
jmsComponent.setTransactionManager(tm);
jmsComponent.setMaxConcurrentConsumers(1);            
jmsComponent.setMaxMessagesPerTask(1);                  
jmsComponent.setIncludeSentJMSMessageID(true);
Run Code Online (Sandbox Code Playgroud)

预先感谢您的帮助!

UPDATE

我想,我已经找到了描述行为的原因.高级队列上配置了延迟.只要延迟持续,队列中的下一条消息就会出列.消息不是随机出列的,它们根据优先级出列.

我真的认为这是必须在消费者身上配置的东西.是否有任何技巧可以配置camel-jms-component来消耗队列中的第一条消息,只要它没有被提交或移动到异常队列?我没有找到在camel上直接配置它的选项...

java jms advanced-queuing apache-camel

7
推荐指数
1
解决办法
1401
查看次数

Oracle 高级队列 - 队列传播

编辑:这似乎是将两个队列放在同一个模式中的事情。

我正在尝试使用队列传播进行实验,但在目标队列中没有看到记录。但这很容易是因为我没有准备好所有的部分。

有没有人可以发布测试用例?我将包括我在下面尝试的内容。我发现文档中的故障排除有点轻,传播是一个黑匣子,很难知道为什么它不动。

这是我所拥有的;没有笑。


CREATE OR REPLACE TYPE test_payload AS OBJECT(
   test_id   NUMBER,
   test_dt   DATE);


DECLARE
   subscriber   SYS.aq$_agent;
BEGIN
--- Create Originating Queue and start it

   DBMS_AQADM.create_queue_table( queue_table => 'Test_MQT', queue_payload_type => 'Test_Payload',
                                  multiple_consumers => TRUE ); --- multiple subscriber 

   DBMS_AQADM.create_queue( 'Test_Q', 'Test_MQT' );
   DBMS_AQADM.start_queue( queue_name => 'Test_Q' );

--- Create Destination Queue and start it

   DBMS_AQADM.create_queue_table( queue_table => 'Dest_MQT', queue_payload_type => 'Test_Payload',
                                  multiple_consumers => TRUE );
   DBMS_AQADM.create_queue( 'Dest_Q', 'Dest_MQT' );
   DBMS_AQADM.start_queue( queue_name => 'Dest_Q' );

--- Add Subscriber and …
Run Code Online (Sandbox Code Playgroud)

oracle advanced-queuing

5
推荐指数
1
解决办法
4801
查看次数

用于处理未来事件的查找结构(基于时间)

我正在寻找一个有效的数据结构,这将允许我提示事件...也就是说,我将有一个应用程序,在任何时候执行,有可能,一个事件将被提出以便将来执行点...类似于:

  • t = 20:在420秒内,发生A.
  • t = 25:在13秒内,B发生
  • t = 27:在735秒内,C发生
  • ...

所以我想拥有一个数据结构,我可以在任何时间在任何时间放入任何时间,我可以获得和(通过这样做)删除所有应有的事件...另外,如果加上将是,如果我能够从数据结构中删除一个事件(因为它已被取消)...虽然不太重要,因为我可以简单地将其标记为已取消...

我的第一个想法是,也许要做某种树,但我想删除 - 因事件部分需要大量的再平衡......

我正在考虑简单地使用int哈希,将时间戳映射到null或在那个时间点发生的事件堆栈...我认为在场景中,有很多事件(可能每秒多次 - 这就是我打算工作),毕竟这实际上并不是一个坏主意......

所以我渴望听到你的意见...... :)


编辑:

  • 更具体一点:我认为这里约为100K-1M,我想我可能会有大约1-100个事件/秒......
  • t并不特别重要......它只是为了说明未来的事件可以随时"排队"......

谢谢

back2dos

language-agnostic performance advanced-queuing data-structures

4
推荐指数
1
解决办法
588
查看次数

Java 中的 Oracle 高级队列

我正在实施 Oracle Advanced Queue,并且对它完全陌生。我对此有一些疑问。下面是我的代码:

package com;

/* Set up main class from which we will call subsequent examples and handle 
 exceptions: */
import java.sql.*;

import oracle.AQ.*;

public class test_aqjava
{
    public static void main(String args[]) 
    {
        AQSession  aq_sess = null;
        try 
        {
            aq_sess = createSession(args);
            createAqTables(aq_sess);
            enqueueMsg(aq_sess);
            // dequeueMsg(aq_sess);
            aq_sess.close();

            /* now run the test: */
            // runTest(aq_sess);     
        }
        catch (Exception ex)
        {
            System.out.println("Exception-1: " + ex); 
            ex.printStackTrace();      
        }  
    }

    public static AQSession createSession(String args[]) 
    {
        Connection db_conn;
        AQSession  aq_sess …
Run Code Online (Sandbox Code Playgroud)

java oracle advanced-queuing

4
推荐指数
1
解决办法
8786
查看次数

Oracle中的PL/SQL函数无法看到DBMS_AQ

我有Oracle 9.2和JMS的问题.我创建了PL/SQL例程来将XML文本(从文件或CLOB)发送到队列,但是这个例程不能编译.

我的代码看起来像(填充消息省略):

create or replace procedure jms_test(msg varchar2)
is
    id                 pls_integer;
    message            sys.aq$_jms_stream_message;
    enqueue_options    dbms_aq.enqueue_options_t;
    message_properties dbms_aq.message_properties_t;
    msgid raw(16);

    java_exp           exception;
    v_filehandle_input utl_file.file_type;
    v_newline     varchar2(32767);
    pragma exception_init(java_exp, -24197);
begin
    message := sys.aq$_jms_stream_message.construct;
    message.set_string_property('FROM', 'TEST');
    id := message.clear_body(-1);
end;
Run Code Online (Sandbox Code Playgroud)

甲骨文报告说:

Error(6,21): PLS-00201: identifier 'DBMS_AQ' must be declared
Run Code Online (Sandbox Code Playgroud)

我查看了一些新闻组并尝试了我发现的所有内容,但没有成功.

  1. 授予(成功)许多权利

    • 授予用户资源;
    • GRANT连接到用户;
    • GRANT对用户执行任何程序;
    • GRANT aq_administrator_role TO user;
    • GRANT aq_user_role TO user;
    • GRANT EXECUTE ON dbms_aqadm TO user;
    • GRANT EXECUTE ON dbms_aq TO user;
    • GRANT EXECUTE ON dbms_aqin TO user;
  2. desc dbms_aq显示了许多函数,如DEQUEUE,ENQUEUE,LISTEN …

oracle plsql jms advanced-queuing

3
推荐指数
1
解决办法
2万
查看次数

没有字段名称的mongodb查询

我想查询具有包含特定值的字段的所有对象.例如,我有两个文件:

{"123": "apple", "217": "pear", "179": "orange"}
{"831": "pear", "189": "grapes"}
Run Code Online (Sandbox Code Playgroud)

并且想要获得具有值为"apple"的字段的所有对象,但我不知道该字段的名称.是否可以在MongoDB中指定查询来实现此目的?(对象中的数字键是子ID,对象中的值是长GUID)

advanced-queuing mongodb

2
推荐指数
1
解决办法
3813
查看次数