JMS 规范创建了一个标准,该标准结合了现有 MOM 系统的许多元素,但并不包含所有的可能元素。相反,它试图设置一个可扩展的方案来兼顾不同元素之间的区别并适应将来的发展。JMS 的很多消息传送元素都需要各个提供者来定义和实现。其中包括负载平衡、标准错误消息、管理 API、安全性、底层线路协议以及消息存储库。下一节Message Queue:元素和功能将介绍 Message Queue 如何实现其中的很多元素及其如何扩展 JMS 规范。
JMS 未完整定义的两个消息传送元素是连接工厂和目的地。尽管这些元素是 JMS 编程模型中的基础元素,但在提供者定义和管理这些对象的方式上,存在许多现有的和预期的区别,以致于不可能也不值得创建一个公共的定义。因此,这两个对象通常使用管理工具来创建和配置,而不是以编程方式来创建。它们随后将存储在对象存储库中,JMS 客户端可以通过标准的 JNDI 查找功能来访问它们。
连接工厂受管理对象用于生成客户端与代理的连接。它们封装特定于提供者的信息,这些信息控制消息传送行为的某些方面:连接处理、客户端标识、消息头覆盖、可靠性和流控制等。每个源自给定连接工厂的连接都展示出为该工厂配置的行为。
目的地受管理对象用于引用代理中的物理目的地。它们封装特定于提供者的命名(地址-语法)约定,并指定在其中使用目的地的消息传送域:队列或主题。
JMS 客户端不需要查找受管理的对象,它们可以通过编程的方式创建这些对象(随后这些对象存储在代理的内存中)。要快速建立原型,最方便的方法可能是以编程方式创建这些对象。但是,如果要在生产环境中部署,则在中心系统信息库中查找受管理对象会更便于控制和管理消息传送行为:
通过对连接工厂对象使用管理对象,管理员可以通过重新配置这些对象来调整消息传送性能。不必重新编码即可改善性能。
通过对物理目的地使用管理对象,管理员可以通过要求客户端访问这些预配置的对象来控制这些目的地在代理上的扩散。
受管理对象使开发者无需了解特定于提供者的实现详细信息,而允许将他们针对某个提供者开发的代码在无需更改或只需稍作更改的情况下移植到其他提供者。
如图 1–5 中所示,受管理对象的使用是基本 JMS 应用程序图中的最后一项关键技术。
图 1–5 显示消息生成方和消息使用方如何使用目的地受管理对象来访问对应于该对象的物理目的地。带编号的步骤是管理员和客户端应用程序在使用此机制发送和接收消息时需要执行的操作。