簡體   English   中英

來自 Nodejs 的 Oracle AQ 上的 JMS 文本消息

[英]JMS Text Message on Oracle AQ from Nodejs

我正在嘗試從 nodejs 在 oracle AQ 上排隊 jms 文本消息。

const enqueue = async () => {
    try {
        await oracle.createPool();
        const connection = await oracle.getConnection();
        const jmsMessageType = "SYS.AQ$_JMS_TEXT_MESSAGE";

        const queue = await connection.getQueue(bv.REQUEST_QUEUE_NAME, {payloadType: jmsMessageType});

        const theRequest = new queue.payloadTypeClass({
            text_length: request.length,
            text_vc: request
        });
        await queue.enqOne(theRequest);
        await connection.commit();
    } catch(e){
        console.error(e);
    }
}

enqueue();

我可以看到消息在 oracle 的 AQ 表中排隊,但是消費者在嘗試將消息出列時中斷:

oracle.jms.AQjmsException: JMS-120: Dequeue failed
    at oracle.jms.AQjmsError.throwEx(AQjmsError.java:337)
    at oracle.jms.AQjmsConsumer.jdbcDequeueCommon(AQjmsConsumer.java:1995)
    at oracle.jms.AQjmsConsumer.receiveFromAQ(AQjmsConsumer.java:1374)
    at oracle.jms.AQjmsConsumer.receiveFromAQ(AQjmsConsumer.java:1292)
    at oracle.jms.AQjmsConsumer.receiveFromAQ(AQjmsConsumer.java:1270)
    at oracle.jms.AQjmsConsumer.receiveNoWait(AQjmsConsumer.java:1068)
    ...
Caused by: java.lang.NullPointerException
    at oracle.jms.AQjmsTextMessage.readTextMessageContainer(AQjmsTextMessage.java:328)
    at oracle.jms.AQjmsTextMessage.<init>(AQjmsTextMessage.java:161)
    at oracle.jms.AQjmsConsumer.jdbcDequeueCommon(AQjmsConsumer.java:1751)
    ... 19 more

關於 JMSTextMessage 類型的正確結構的任何想法?

基本上只需要獲取屬性名稱的類型和用戶大寫的定義。 大寫非常重要 - 它只是忽略小寫的屬性名稱。

  • SYS.AQ$_JMS_TEXT_MESSAGE
  • SYS.AQ$_JMS_HEADER
  • SYS.AQ$_JMS_USERPROPARRAY
  • SYS.AQ$_JMS_USERPROPERTY

如果您需要更多,請看這里: https : //docs.oracle.com/cd/B10501_01/appdev.920/a96612/t_jms3.htm

 const theRequest = new queue.payloadTypeClass(
            {
                HEADER: {
                    USERID: "YOUR_USER",
                    PROPERTIES: [
                        {
                            NAME: "JMS_OracleDeliveryMode",
                            TYPE: 100,
                            STR_VALUE: "2",
                            NUM_VALUE: null,
                            JAVA_TYPE: 27
                        },
                        {
                            NAME: "JMS_OracleTimestamp",
                            TYPE: 200,
                            STR_VALUE: null,
                            NUM_VALUE: new Date().getTime(),
                            JAVA_TYPE: 24
                        }
                    ]
                },
                TEXT_LEN: request.length,
                TEXT_VC: request
            }
        );

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM