1

我想创建一个使用 AMQP 协议(​​例如 ActiveMQ 或 RabbitMQ)将消息发送到消息传递队列的类,但不包括任何特定的 jar/文件/库到这些 MQ 提供程序。

我在网上看到的每个示例都使用上述技术之一。我以为我能够严格使用 JMS 连接到队列?如何将我的消息传递技术与我的生产者/消费者类解耦,以便我可以在不重新编译代码的情况下将 ActiveMQ 与 RabbitMQ 切换出去?这甚至可能吗?

/沮丧@ 7:00 PM :(

谢谢!

4

3 回答 3

3

是的,有可能。您要做的是确保您没有在代码中引用任何 ActiveMQ 对象。

然后你需要创建工厂方法来获取 ActiveMQ/RabbitMQ 方法。

就像是

public ConnectionFactory getConnectionFactory() throws IllegalAccessException, InstantiationException {
    Class<?> klass = Class.forName(System.getProperty("JMSConnectionFactory");
    return (ConnectionFactory)klass.newInstance();
}

可悲的是,您将遇到的困难是每个提供者的初始化代码都略有不同。所以你需要支持每一个。

您可以通过反射来完成这一切,但辅助类可能会更好。

于 2013-06-06T02:39:55.570 回答
2

看看这个:实现独立于供应商的 JMS 解决方案。披露:我不久前写的,但我想你会发现它从 JMS 的角度解决了你的问题。

更新:由于 IBM 删除了该页面,这里是 archive.org 中保存的快照实施独立于供应商的 JMS 解决方案

于 2013-06-06T08:47:39.803 回答
0

您可以尝试 SwiftMQ AMQP 1.0 Java 客户端http://www.swiftmq.com/products/router/swiftlets/sys_amqp/client/index.html

于 2013-06-06T04:03:51.387 回答