小编Zub*_*ana的帖子

如何在Java提交时排队入Oracle AQ表并通过JMS客户端使用

我正在为企业级产品编写Java组件,并希望利用Oracle 11g数据库的特定功能Active Queues。我要完成的确切场景是-1.在提交时向oracle活动队列/队列表中写入一条消息2.使用JMS使用者从队列中读取该消息

我在http://docs.oracle.com/cd/B28359_01/java.111/b31224/streamsaq.htm上观看了演示和教程。

特别是,我想重点介绍代码的入队部分-

    // Create the actual AQMessage instance:
    AQMessage mesg = AQFactory.createAQMessage(msgprop);
    // and add a payload:
    byte[] rawPayload = new byte[500];
    for (int i = 0; i < rawPayload.length; i++) {
        rawPayload[i] = 'b';
    }

    mesg.setPayload(new RAW(rawPayload));

    AQEnqueueOptions opt = new AQEnqueueOptions();
    opt.setRetrieveMessageId(true);
    opt.setDeliveryMode(AQEnqueueOptions.DeliveryMode.PERSISTENT);
    opt.setVisibility(AQEnqueueOptions.VisibilityOption.ON_COMMIT);

    // execute the actual enqueue operation:
    conn.enqueue(queueName, opt, mesg);
Run Code Online (Sandbox Code Playgroud)

这对我来说效果很好,因为我们要确保仅在提交事务后,该消息才对消费者可见。

问题-在演示中,我们创建有效负载类型RAW的队列

doUpdateDatabase(conn,
           "BEGIN "+
           "DBMS_AQADM.CREATE_QUEUE_TABLE( "+
           "   QUEUE_TABLE        =>  '"+USERNAME+".RAW_SINGLE_QUEUE_TABLE',  "+
           "   QUEUE_PAYLOAD_TYPE =>  'RAW', "+
           "   COMPATIBLE         => …
Run Code Online (Sandbox Code Playgroud)

java oracle jms oracle-aq

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

标签 统计

java ×1

jms ×1

oracle ×1

oracle-aq ×1