我一直在编写一些代码来从 JMS 主题中删除消息,而不从我们的数据库中使用它们(由于我们的数据库存在一些问题)。我发现没有专门的方法可以直接从主题中删除消息,但我一直在尝试创建 JMS 连接并创建主题和使用者,然后使用它来删除消息。
我遇到的问题是在我的代码中创建 JMS 会话后,它应该使用现有主题创建主题,创建消费者,然后循环消费者并删除消息。在主题创建过程中出现问题,我不确定主题名称的格式是否错误或什么,但我需要获取主题的正确语法应该是什么的示例,或者是否可能存在不同的问题。另外,我能够单独列出我的融合环境中的主题名称,但我得到的格式也不起作用,它看起来像这样:
myJMSModule!MyJMSServer@[email protected]
这是我的代码:
context = InitialContext(jndi_props)
connection_factory = context.lookup("my/connectionFactory")
connection = connection_factory.createConnection()
session = connection.createSession(False, javax.jms.Session.AUTO_ACKNOWLEDGE)
topic = session.createTopic("Where im having issues")
consumer = session.createConsumer(topic, selector)
connection.start()
try:
while True:
message = consumer.receiveNoWait()
if message is None:
break
if isinstance(message, JMSMessageInfo):
print("Removing message: %s " % message.getJMSMessageID())
session.deleteMessage(message) # Acknowledge the message to remove it
finally:
consumer.close()
session.close()
connection.close()
这是我经常遇到的错误之一:
weblogic.jms.common.JMSException: weblogic.jms.common.JMSException: [JMSExceptions:045103]While trying to find a topic or a queue, the specific JMS server requested could not be found. The linked exception may contain more information about the reason for failure.
我需要一些帮助,或者如果您知道更好的方法来从主题中删除消息而不消耗它们,这也会非常有帮助。
session.createTopic
是我的问题出现的地方。我尝试过 My.TOPIC.NAME
、/My.TOPIC.NAME
、myJMSServer/My.TOPIC.NAME
、myJMSModule/My.TOPIC.NAME
等格式。
JMS API 不支持任何在不实际使用消息的情况下删除消息的方法。