2

在帮助下 [链接]如何在使用 Java 提交时在 Oracle AQ 表上排队并使用 JMS 客户端使用我正在尝试实现这一点 -

declare
  msg SYS.AQ$_JMS_TEXT_MESSAGE;
  queue_options DBMS_AQ.ENQUEUE_OPTIONS_T;
  msg_props DBMS_AQ.MESSAGE_PROPERTIES_T;
  msg_id RAW(16);
begin
  msg_props.expiration := 12;
  msg_props.exception_queue := 'EVT_QUEUE_E';
  msg := SYS.AQ$_JMS_TEXT_MESSAGE.CONSTRUCT();
  msg.set_text('Hello World from PL/SQL Count 5');
  DBMS_AQ.ENQUEUE( queue_name => 'EVT_QUEUE'
                 , enqueue_options => queue_options
                 , message_properties => msg_props
                 , payload => msg
                 , msgid => msg_id);
  commit;
end;

这是使用默认消息属性将消息排入队列的函数。

public static void sendMessage(String user, String queueName, String message) throws SQLException
    {
        try
        {
            QueueConnection qCon = getConnection();
            session = qCon.createQueueSession(false, Session.CLIENT_ACKNOWLEDGE);
            qCon.start();
            Queue queue = ((AQjmsSession) session).getQueue(user, queueName);
            MessageProducer producer = session.createProducer(queue);
            //AQMessage
            TextMessage msg = session.createTextMessage(message);
            producer.setTimeToLive(1);  //expiration time
            producer.send(msg);
            System.out.println("Sent message = " + msg.getText());
            session.close();
            producer.close();
            qCon.close();
        }
        catch (JMSException e)
        {
            e.printStackTrace();
            return;
        }
    }

如何将异常队列传递给消息属性?

4

1 回答 1

0
msg.setStringProperty("JMS_OracleExcpQ","ExceptionQName");

参考资料: https ://docs.oracle.com/cd/E11882_01/server.112/e11013/jm_create.htm#ADQUE2927 http://docs.oracle.com/cd/E11882_01/server.112/e11013/jm_create.htm #ADQUE2877

确保在创建队列时将 queue_type 定义为异常队列。 https://docs.oracle.com/cd/E11882_01/server.112/e11013/aq_admin.htm#ADQUE0803

于 2015-12-19T01:36:22.120 回答