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