通用 JMS 客户端

5

请问是否有可能编写一个通用的JMS客户端 - 即可以使用不同供应商(如Sonic,IBM SIB,Jboss等)提供的JMS?

每次我编写JMS客户端代码时,都是非常具体实现的,并且依赖于特定的JAR和上下文类。

谢谢。

4个回答

9

对我来说,至少一种最佳实践是使用非参数InitialContext构造函数,并将提供程序特定的内容(例如初始上下文工厂和提供商URL)放入类路径中的jndi.properties文件中,而不是硬编码这些内容。您还需要将“正确”的JMS提供程序JAR文件放在类路径上。 换句话说,您可以拥有通用代码,但仍然需要配置运行时环境(除非您在像Spring这样的容器中运行客户端代码)。


6

已经有两个好的答案了,但是我想再添加一点解释。JMS是一个API标准,它并没有定义到服务器的传输协议。因此所有的JMS实现都有不同的传输协议 - 因此你总是需要厂商特定的JAR文件。创建一个与所有JMS提供者兼容的JMS客户端库是不可能的。
在你的源代码中,你应该避免使用厂商特定的功能(例如TIBCO EMS允许你使用非JNDI本地名称访问目标,并且它具有自定义确认模式)。如果你总是使用JNDI查找,那么只有JNDI URL和初始上下文工厂名称会特定于服务器类型。


4

4

如果将来有人寻找通用的客户端,请尝试使用HermesJMS,它带有主要JMS提供商(ActiveMQ、WebSphere MQ等)的插件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接