Weblogic:使用 WLST 将消息从导出的 xml 文件导入到统一分布式 Queue

Weblogic: Import messages to a Uniform Distributed Queue from exported xml file using WLST

我正在尝试编写脚本以使用 WLST 将消息导入 Weblogic 中的统一分布式 queue,但我无法找到专门满足我要求的解决方案。

让我解释一下要求:

我有存储失败消息的错误 queue。我已将它们导出为 xml 文件(使用 WLST),并根据消息 header 中的不同错误代码将它们隔离为更小的 xml 文件,这些文件需要导入到主 queue 用于重新处理(不使用管理控制台)。

我确信可以做一些事情来实现这一点,因为我可以使用管理控制台中的导入选项导入隔离的 xml 文件,这非常有效,但不知道如何实现它实际上正在完成,以便它可以作为脚本实现。

我已经探索了一些选项,例如将文件导出为二进制 SER 文件,该文件可以工作,但它不能仅用于过滤掉可重试的消息。

第一个方法importMessages() 只接受复合数据类型数组。从 xml 文件 convert/create 所需的复合数据类型数组的任何方法也将是解决该问题的好方法。

我同意这不是很简单和直观。 您有 2 个解决方案:

  • 纯 WLST 代码
  • java 使用 JMS 的代码 API

如果您想编写纯 WLST 代码,这里有一个代码示例可以帮助您。该代码创建 n 条消息并将其发布到队列中。 buildJMSMessage() 函数负责创建文本消息。

from javax.management.openmbean import CompositeData
from weblogic.jms.extensions import JMSMessageInfo, JMSMessageFactoryImpl

...

def buildJMSMessage(text):

    handle = 1
    state = 1
    XidString = None
    sequenceNumber = 1
    consumerID = None
    wlmessage = JMSMessageFactoryImpl.getFactory().createTextMessage(text)

    destinationName = ""
    bodyIncluded = True
    msg = JMSMessageInfo(handle, state, XidString, sequenceNumber, consumerID, wlmessage, destinationName, bodyIncluded)

    return msg



....

quanity = 10
messages = jarray.zeros(quantity,CompositeData)

for i in range(0,quantity):
    messages[i] = buildJMSMessage('Test message #'+str(i)).toCompositeData()
    i = i + 1

queue.importMessages(messages, False)