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)
我正在尝试编写脚本以使用 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)