【问题标题】:Migrating from WebSphere MQ to Active MQ从 WebSphere MQ 迁移到 Active MQ
【发布时间】:2017-02-01 06:21:06
【问题描述】:

有一个类似的问题Procedure to migrate from IBM MQ to ActiveMQ 已关闭,但无论如何我都会尝试。 我们的客户希望从 WebSphere MQ 迁移到 Active MQ。在上面提到的问题中,据说对于 JMS,这种迁移理论上将包括应用程序的重新配置。我们的客户说他们的应用程序使用自动生成的 .bindings 文件。那么,是否可以仅通过编辑 .binding 文件并将活动 mq 的 .jar 放入 java 类路径来使应用程序与 Active MQ 一起使用,或者需要一些其他配置?

【问题讨论】:

    标签: activemq ibm-mq


    【解决方案1】:

    为了检查这一点,我尝试了以下方法

    a) 使用 JMSAdmin 创建 WMQ 绑定文件。一旦我创建了 QCF 和队列,我就能够通过 JMS 查找发送消息并发送消息。

    b) 对于生成 .bindings 文件的 AMQ 设置,IBM 提供了一些示例代码到 generate the bindings file.

    完成此操作后,我使用完全相同的代码发送消息,并且消息完美地发送到 AMQ 和 WMQ

    这是我能够互操作的示例代码。

    public void sendMessages() {
    
            ConnectionFactory connectionFactory;
            Connection con = null;
            Session session = null;
            MessageProducer producer = null;
            //create initial context properties
            Properties initialContextProperties = new Properties();
            initialContextProperties.put("java.naming.factory.initial", "com.sun.jndi.fscontext.RefFSContextFactory");
            initialContextProperties.put(Context.PROVIDER_URL, "file:/C:/JNDI-Directory/AMQ");
            initialContextProperties.setProperty("transport.jms.security.authentication", "none");
    
            try {
                InitialContext initialContext = new InitialContext(initialContextProperties);
                //create connection factory object
                //ivtQCF - created connection factory object in IBM-MQ
                connectionFactory = (ConnectionFactory) initialContext.lookup("confact2");
                con = connectionFactory.createConnection();
                con.start();
                session = con.createSession(false, Session.AUTO_ACKNOWLEDGE);
                //localq - created queue in IBM-MQ
                Destination destination = (Destination) initialContext.lookup("dest");
                producer = session.createProducer(destination);
                String msg = "SAMPLE MESSAGE PLACED TO QUEUE";
                TextMessage textMessage = session.createTextMessage(msg);
                producer.send(textMessage);
                con.close();
                session.close();
                producer.close();
            } catch (NamingException e) {
                throw new RuntimeException("Unable to send jms messages", e);
            } catch (JMSException e) {
                throw new RuntimeException("Unable to send jms messages", e);
            }
        }
    

    【讨论】:

    • 我非常,我不是 java 程序员,也不了解 java 生态系统。 1.据说JNDI查找需要fscontext.jar和providerutil.jar。我在哪里可以找到它们?
    • 您可以从 Maven 存储库下载它们,例如:mvnrepository.com/artifact/com.sun.jndi/fscontext/1.2-beta-3 有一个下载 JAR 选项。与 providerutil 相同
    • 2.据说从activemq服务器复制绑定文件?但发行版中没有任何绑定文件。还是 ActiveMQBindingsCreation.java 用于生成绑定文件? (其中的代码似乎没有这样做)。如果您能帮助澄清,将不胜感激。
    • 我将所有 jars 放到类路径中,但是当我尝试运行 java cod 时,我得到:无法创建 JNDI 上下文:javax.naming.NoInitialContextException:无法实例化类:com.sun.jndi.fscontext。 RefFSContextFactory [根异常是 java.lang.ClassNotFoundException: com.sun.jndi.fscontext.RefFSContextFactory]
    • 这是我对 jndi 异常的错误。我用错了罐子。
    猜你喜欢
    • 2016-12-14
    • 1970-01-01
    • 1970-01-01
    • 2013-05-27
    • 1970-01-01
    • 2015-03-14
    • 2015-06-19
    • 2013-01-03
    • 1970-01-01
    相关资源
    最近更新 更多