[英]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 類型的正確結構的任何想法?
基本上只需要獲取屬性名稱的類型和用戶大寫的定義。 大寫非常重要 - 它只是忽略小寫的屬性名稱。
如果您需要更多,請看這里: 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.