我想创建一个使用 AMQP 协议(例如 ActiveMQ 或 RabbitMQ)将消息发送到消息传递队列的类,但不包括任何特定的 jar/文件/库到这些 MQ 提供程序。
我在网上看到的每个示例都使用上述技术之一。我以为我能够严格使用 JMS 连接到队列?如何将我的消息传递技术与我的生产者/消费者类解耦,以便我可以在不重新编译代码的情况下将 ActiveMQ 与 RabbitMQ 切换出去?这甚至可能吗?
/沮丧@ 7:00 PM :(
谢谢!
是的,有可能。您要做的是确保您没有在代码中引用任何 ActiveMQ 对象。
然后你需要创建工厂方法来获取 ActiveMQ/RabbitMQ 方法。
就像是
public ConnectionFactory getConnectionFactory() throws IllegalAccessException, InstantiationException {
Class<?> klass = Class.forName(System.getProperty("JMSConnectionFactory");
return (ConnectionFactory)klass.newInstance();
}
可悲的是,您将遇到的困难是每个提供者的初始化代码都略有不同。所以你需要支持每一个。
您可以通过反射来完成这一切,但辅助类可能会更好。
看看这个:实现独立于供应商的 JMS 解决方案。披露:我不久前写的,但我想你会发现它从 JMS 的角度解决了你的问题。
更新:由于 IBM 删除了该页面,这里是 archive.org 中保存的快照实施独立于供应商的 JMS 解决方案
您可以尝试 SwiftMQ AMQP 1.0 Java 客户端http://www.swiftmq.com/products/router/swiftlets/sys_amqp/client/index.html