Oracle11g 从IBM MQ迁移到javax.jms.*(Weblogic)

Oracle11g 从IBM MQ迁移到javax.jms.*(Weblogic),oracle11g,jms,weblogic,mq,advanced-queuing,Oracle11g,Jms,Weblogic,Mq,Advanced Queuing,几天来,我一直在寻找如何从使用IBM Websphere MQ迁移到只使用Weblogic 10.3.x服务器中的QueueManager。这将节省IBM MQ的许可证成本。最接近我的是一个外部链接,该链接指出存在做类似事情的IBM示例(从MQ转移到标准jms库),但当我尝试遵循该链接时: 这将导致一个死页:\ 更具体地说,我对 在我尝试替换以下com.ibm.mq.*类时要使用哪些类: MQEnvironment MQQueueManager MQGetMessageOptions MQPu

几天来,我一直在寻找如何从使用IBM Websphere MQ迁移到只使用Weblogic 10.3.x服务器中的QueueManager。这将节省IBM MQ的许可证成本。最接近我的是一个外部链接,该链接指出存在做类似事情的IBM示例(从MQ转移到标准jms库),但当我尝试遵循该链接时: 这将导致一个死页:\

更具体地说,我对

  • 在我尝试替换以下com.ibm.mq.*类时要使用哪些类:
    • MQEnvironment
    • MQQueueManager
    • MQGetMessageOptions
    • MQPutMessageOptions
    • 以及其他没有明显的javax.jms.*替代方案的类
  • 我在迁移过程中可能会遇到一些细微差别和解决方法

  • 我们将队列消息转发到的数据库是Oracle11标准(带有高级队列),如果这改变了什么,那么基本上我们希望“去掉中间人”,可以这么说。我们将非常感谢您的反馈

    我已经完成了一个同时支持JBossMQ和MQSeries/WebSphere MQ的应用程序

    我需要的特定于MQSeries的类是

    import com.ibm.mq.jms.JMSC;
    import com.ibm.mq.jms.MQConnectionFactory;
    import com.ibm.mq.jms.MQQueueConnectionFactory;
    import com.ibm.mq.jms.MQTopicConnectionFactory;
    
    这些都足以创建
    javax.jms.QueueConnection/TopicConnection

    至于WebSphere MQ,我直接连接。 至于JBossMQ,我使用JNDI查找工厂

    因此,除此之外,只有JMS

  • 因此,第一步是重写应用程序,以便只有初始化部分使用WebSphereMQ特定类(我上面列出的类)

  • 用应用程序服务器提供的队列连接工厂的JNDI/目录查找替换其余特定于MQ的部分

  • 从源代码中删除MQ系列特定部分


  • 下面是一个简单的示例,演示了如何发送消息。

    您似乎使用了MQ的MQI api,目前还没有替代品。除了重写MQ应用程序逻辑以使用JMS API之外,没有其他方法

    一个好方法可能是首先使用相同的WebSphereMQ服务器迁移到JMS,因为它允许您以可靠的方式验证结果

    您询问要用什么类替换MQGETPOPTIONS。没有单一的1对1替换(甚至还有一些MQI方面JMS无法轻松替换)。通过在JMS中设置会话和消息的参数,可以使用大多数MQPUTPOPTIONS和其他选项。在尝试此切换之前,您确实需要了解JMS api


    然后,当jms使用WebSphere MQ时,您可以按照铍的建议进行操作,但是将库交换到Weblogic,将任何引用切换到
    com.ibm.MQ.jms.MQConnectionFactory,配置新参数,并向任何可用的god-press运行祈祷:)

    感谢@Berylium,但这里的目标是根本不使用IBM MQ。。现有系统依赖于IBM MQ,建议的解决方案不应再使用IBM MQ,并且必须在Weblogic server中使用内置java消息传递,因此在代码中不能找到“import com.IBM.MQ…”。。就像ibms的MQException被javax的MessageOfeException替换一样,实际上这是我的意图,我更新了我的答案,以澄清这一点:您是否必须为每个队列创建一个单独的生产者和消费者,或者您是否能够将通用组件提取到一种类似IBM专有组件的队列管理器中?一旦您拥有了
    javax.jms.QueueConnection
    ,您就可以创建所有其他jms对象(会话、队列、发送者、消息)。我已经在一些其他(普通Java)类中组织了这个;这不是真正的JMS专用,但它是一种队列管理器。感谢大家的思考,@Petter..这是一项相当艰巨的任务,因为我们目前正在管理数百个不同的队列,所以以前的开发人员自然会创建可重用类来管理这些队列-然而,问题是,IBM类正是针对IBM的。我想没有什么可以避免重写的——给我咖啡!