JMS连接到没有任何特定库的队列

时间:2013-06-06 00:56:36

标签: java jms rabbitmq activemq amqp

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

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

/沮丧@ 7:00 PM :(

谢谢!

3 个答案:

答案 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