推荐的外部客户端连接到JMS队列的连接方法

|| 我们的客户处于基于Extranet的环境中,需要连接到我们的JMS队列。他们是否应该能够仅在JNDI空间中查找我们的队列和connectionFactories。 我的意思是推荐和可扩展的方法是什么...     
已邀请:
在初始化期间,客户端应用程序将需要访问
ConnectionFactory
Destination
Queue
Topic
的基本类型)对象。这些类型统称为托管对象,JMS规范指出它们应实现
javax.naming.Referenceable
java.io.Serializable
接口。 这意味着您不仅可以通过命名服务而且还可以通过其他机制使受管理对象对客户端可用。例如,您可以序列化受管理的对象并将其存储在文件中,将序列化的对象作为电子邮件的附件进行传输,并在Web / FTP服务器上提供
.jso
(Java序列化对象)文件,等等。如果您对Extranet客户端的担忧是他们不知道内部命名服务的联系详细信息,则这种方法可能会很有用。 但这并不能真正回答您的问题,哪种技术是使托管对象可供JMS客户端使用的最佳技术?命名服务?共享文件系统上的序列化目标文件? Web或FTP服务器?数据库?答案是没有“普遍最佳”的方式。一些组织将标准化使用一种技术,而其他组织则倾向于使用另一种技术。如果您正在编写将在许多组织中使用的JMS客户端,则可以使您的客户端灵活地访问受管理对象。您可以通过实现带有如下签名的方法来做到这一点:
public Object importObject(String instructions);
该方法的实现应从ѭ8的开头开始,以确定应该使用哪种技术来检索对象。例如:
obj1 = importObject(\"naming#path/in/naming/service\");
obj2 = importObject(\"file#path/to/file.jso\");
obj3 = importObject(\"exec#command to execute\");
(实际上,这些指令应该从命令行参数或配置文件中获取,而不是硬编码到应用程序中。) 上面显示的“ 10”变体将使执行任意的shell命令成为可能,该命令可以从Web或FTP服务器(也许使用curl),数据库或对用户最方便的任何文件中检索“ 6”文件。多年前,我为另一种中间件技术(CORBA)编写了类似功能的实用程序函数,事实证明它提供的灵活性非常有用。您可以在这里阅读一些有关我的CORBA实用程序功能的信息。 要注意的另一个问题(以及@skaffman在评论中提到的一个问题)是,尽管JMS规范定义了API,但它没有定义在线协议。因此,不同的JMS产品之间通常没有互操作性。因此,如果您的公司内部JMS应用程序是使用产品X构建的,则公司外部JMS客户也将需要使用产品X构建。话虽如此,某些供应商可能会出售可以接受进来的“桥”通过产品X使用的在线协议发送消息,然后使用产品Y的在线协议重新传输消息。这是在不同JMS产品之间提供互操作性的一种方式。 免责声明:不要让这个答案的冗长使您误以为我是JMS专家。实际上,我使用JMS的经验非常有限,因此,如果有人添加评论说我的建议有缺陷,那么他们可能是正确的。     

要回复问题请先登录注册