繁体   English   中英

如何编写 JMS 代理?

[英]How to write a JMS Broker?

Java 消息服务如何与经纪人有关? 我看到了创建生产者和消费者客户端的教程和示例,但我不明白如何让代理参与 JMS。 我看到有例如 ActiveMQ 可以很容易地使用 class 来实现代理,但是看起来我还必须在我的客户端中使用 ActiveMQ 方法来建立与代理的连接而不是使用JMS 方法?

JMS API本质上是一个客户端API。 它定义了客户端用来与代理交互的 API。 如果实现的行为符合 JMS 规范,那么如何实现代理是完全任意的。 这使那些正在实施 JMS 代理的人有足够的自由以适合他们自己的要求和约束的方式实施它。 这也意味着 JMS API未定义创建和配置代理(可能是任何代理)的实例。

此外,JMS规范建立了客户端能够在 JNDI 中找到他们的“管理对象”(即连接工厂和目的地)的约定。 JMS 2 规范的第 5.1 节规定:

尽管受管理对象的接口不明确依赖于 JNDI,但 JMS 建立了 JMS 客户端通过使用 JNDI 在名称空间中查找它们来找到它们的约定。

由于这种约定,大多数 JMS 提供者还提供了一个 JNDI 实现以与 JMS 实现一起使用。 ActiveMQ 通过org.apache.activemq.jndi.ActiveMQInitialContextFactory class 提供此功能。 ActiveMQ 文档中进一步讨论了此 JNDI 实现的使用和配置。

由于使用 JNDI 只是一种约定,因此大多数 JMS 提供者都有访问管理对象的替代方法。 例如,ActiveMQ 允许您使用特定于 ActiveMQ 的类以编程方式实例化连接工厂或目标。

要将 JMS 客户端连接到其相应的代理,您首先需要决定是要使用 JNDI 还是使用特定于提供程序的机制。 一般来说,JNDI 是首选方法,因为它是可插入的(使用在应用程序类路径上的jndi.properties文件中定义的属性),这使得在需要时更容易在 JMS 代理之间切换。 一旦做出决定,您将获得一个javax.jms.ConnectionFactory实例并使用它来创建您的javax.jms.Connection等。在此之后有很多关于如何编写 JMS 客户端的教程和文档。

最终,当连接到 ActiveMQ 时,除了在客户端应用程序中使用 JMS 和 JNDI API 之外,没有任何严格的要求。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM