|
Sun ONE Message Queue 3.0.1 SP2 发行说明 |
Sun ONE Message Queue 发行说明
版本 3.0.1 SP2
部件号 817-3829-10
2003 年 8 月
这些发行说明包含 Sun Open Net Environment (Sun ONE) Message Queue 的版本 3.0.1 Service Pack 2 (SP2) 发行时提供的重要信息。本文中阐述了新功能和增强功能、已知的限制和问题、技术说明以及其它信息。请在开始使用 MQ 3.0.1 SP2 前先阅读此文档。
您可以通过以下 Sun ONE 文档 Web 站点获得这些发行说明的最新版本:http://docs.sun.com/?p=/coll/S1_MessageQueue_301。在安装和设置软件之前,请先查看此 Web 站点并在以后定期查看最新发行说明和手册。
这些发行说明包含以下各节:
版本历史记录
表 1 版本历史记录 日期
更改说明
2003 年 8 月 本文档做了以下更改:
- 对文档的组织结构和版本号的说明做了微小的更改。
- 添加了新的小节 Message Queue 3.0.1 SP2 的新功能。
- 在已知错误中添加了错误 4879448、4883126、4888270 和 4883126。
- 在 Message Queue 3.0.1 版本中已更正的错误中添加了错误 4683129、4735757、4758424、4758427、4770212、4770518、4809079、4821708、4828860、4835586 和 4879448。
2002 年 10 月 本文档的初始版本
符合 Java Message Service (JMS) 规范MQ 3.0.1 已被证明符合 Java Message Service (JMS) 1.1 规范:它通过了 JMS 1.1 兼容性测试套件 (CTS) 的测试。
MQ 3.0.1(Sun ONE Application Server 7 的本地 JMS 提供程序)也已通过了 Sun ONE Application Server 7(需要符合 JMS 1.0.2b 规范)的 J2EE 1.3.1 CTS 测试。
Message Queue 3.0.1 SP2 的新功能MQ 3.0.1 SP2 是 MQ 3.0.1 SP1(为说明错误而发行的,不包含新功能)的更新。MQ 3.0.1 SP1 是 MQ 3.0.1 的更新。在这些发行说明中,提到的 3.0.1 版本通常分别指 3.0.1、3.0.1 SP1 和 3.0.1 SP2。
MQ 3.0.1 SP2 产品包含 MQ 3.0 和 3.0.1 的所有新功能,以及其它两项 3.0.1 SP2 功能。
Message Queue 3.0.1 SP2 的新功能
MQ 3.0.1 SP2 与 MQ 3.0.1 相比,包含了两项新功能:
Message Queue 3.0.1 的新功能
MQ 3.0.1 与 MQ 3.0 相比,包含了两项新功能:
Message Queue 3.0 的新功能
MQ 3.0 包含对产品的 2.0 版本 iMQ 2.0(以及 iMQ 2.0,Service Pack 1)所做的大量更改。
这些更改中值得注意的是该产品现有两个版本:平台版和企业版。
平台版 提供基本 JMS 支持,最适合小规模部署和开发环境。
企业版 提供 HTTP/HTTPS 支持、增强的可缩放性和安全功能,最适合大规模部署。
(有关这两个版本的详细信息,请参见对《MQ Administrator's Guide》或《MQ Developer's Guide》的介绍。)
以下有关 MQ 3.0 产品中更改的说明根据其适用性(适用于两个版本还是仅适用于企业版)进行了分类。
适用于企业版和平台版
MQ 现在支持 JMS 1.1 规范的新增功能,与 JMS 1.0.2 相比,JMS 1.1 提供了 JMS 客户机编程的简化方式。特别是,JMS 客户机可以通过同一连接,也可以在同一会话内执行点对点信息传送和发布/订阅信息传送,还可以在同一事务中同时包含队列和主题。
简而言之,JMS 客户机开发者无需在 JMS 1.0.2 的单独点对点域和发布/订阅编程域之间进行选择,而是选择简单一致的 JMS 1.1 域方式。此为首选方式,但是 JMS 1.1 规范继续支持单独的 JMS 1.0.2 编程域。(事实上,MQ 产品附带的应用程序实例以及《MQ Developer's Guide》中提供的代码实例均使用单独的 JMS 1.0.2 编程域。)
仅适用于企业版
Message Queue 文档更新以下 MQ 3.0.1 和 MQ 3.0.1 SP2 文档已经从该产品的 3.0 版进行了更新。您可以通过以下 Sun ONE 文档 Web 站点获得这些已更新的文档:http://docs.sun.com/coll/S1_MessageQueue_301。
安装指南
《MQ Installation Guide》已经更新,包含了 MQ 3.0.1 SP2 中的新功能(请参见 Message Queue 3.0.1 SP2 的新功能)。
管理员指南
《MQ Administrator's Guide》已经更新,包含了 MQ 3.0.1 中的更改(请参见 Message Queue 3.0.1 的新功能)。
开发者指南
《MQ Developer's Guide》已经更新,包含了 MQ 3.0.1 中的更改(请参见 Message Queue 3.0.1 的新功能)。
兼容性问题MQ 3.0.1 版本与 MQ 3.0 完全兼容,并且从 MQ 3.0 升级到 MQ 3.0.1 无需更改代理配置、被管理对象、管理工具或客户机应用程序。
但是,MQ 3.0.1 版本(以下简称 3.0.1)通常与 iMQ 2.0 不兼容。特别是,从 iMQ 2.0(或 iMQ 2.0 Service Pack 1)升级到 MQ 3.0.1 时可能需要处理许多问题:
代理兼容性
由于代理属性和持久性存储架构已做了更改,所以 MQ 3.0.1 代理不会与 iMQ 2.0 代理兼容。但是,如表 2 中所示,某些 iMQ 2.0 数据与 MQ 3.0.1 兼容,并且能够在升级到 MQ 3.0.1 时保留下来。从 iMQ 2.0 升级到 MQ 3.0.1 时,您应当考虑以下问题:
- 您可以将 iMQ 2.0 config.properties 文件复制到其它位置,并且在大多数情况下,需要在配置 MQ 3.0.1 代理时咨询它们包含的属性设置。
- 任何持久性 iMQ 2.0 数据(消息、目标、长期订阅)均不能重复使用。特别是,您需要在 MQ 3.0.1 代理中重新创建 iMQ 2.0 目标。
- 安装完 MQ 3.0.1 后,您可以继续使用 iMQ 2.0 用户系统信息库及访问控制属性文件。MQ 3.0.1 安装程序不会覆写这些文件。但是,您需要将它们移到适当的 MQ 3.0.1 位置(请参见《MQ Administrator's Guide》中的附录 D)。
被管理对象的兼容性
MQ 3.0.1 管理的对象已经增添了新属性,并且 iMQ 2.0 属性已经被重新命名。所以,从 iMQ 2.0 升级到 MQ 3.0.1 时,您应当考虑以下问题:
- 您可以使用在 iMQ 2.0 中创建的对象存储和被管理对象;但是最好在安装完 MQ 3.0.1 后升级被管理对象。在执行更新操作时,管理控制台 (imqadmin) 和 ObjectManager 命令行实用程序 (imqobjmgr) 将把 iMQ 2.0 管理的对象转换为 MQ 3.0.1 管理的对象。
- MQ 3.0.1 客户机运行时将查找 iMQ 2.0 管理的对象,并通过将其转换为本地 MQ 3.0.1 管理的对象来将其实例化,但是这不会将对象存储中的 iMQ 2.0 管理的对象转换为 MQ 3.0.1 管理的对象。
- 需要重写将被管理对象(即它们依赖于 JMS 提供程序)直接实例化的 JMS 客户机(应用程序和/或组件)以适应新的被管理对象属性名称(有关被管理对象属性的信息,请参见《MQ Developer's Guide》中的第 4 章和附录 A)。
- 需要重写启动 JMS 客户机的脚本和使用命令行选项设置被管理对象属性值的脚本,以适应新的被管理对象属性名称(有关被管理对象属性的信息,请参见《MQ Developer's Guide》中的第 4 章和附录 A)。
管理工具的兼容性
由于重命名了许多文件和目录(特别是将字符串“jmq”替换为“imq”),因此所有 MQ 3.0.1 命令行实用程序、代理属性、被管理对象属性和内部文件名均已更改。所以,从 iMQ 2.0 升级到 MQ 3.0.1 时,您应当考虑以下问题:
- 需要编辑所有使用命令行实用程序(imqbrokerd、imqcmd 和 imqobjmgr 等)的脚本,以将旧命令替换为新命名的命令。请特别注意,jmqbroker 命令现在为 imqbrokerd。
- 管理控制台 (imqadmin) 使您可以同时管理几个代理和/或对象存储,并保存显示在屏幕左侧导航窗格中的管理的实体列表。因此,每次启动控制台时都将重新显示管理的实体列表。对于 MQ 3.0.1,存储 iMQ 2.0 管理控制台的用户设置的目录的名称已经更改。从 iMQ 2.0 升级到 MQ 3.0.1 时,如果您希望保留旧的控制台设置,需要将存储 brokerlist.properties 和 objstorelist.properties 文件的目录名称由 $HOME/.jmq/admin 更改为 $HOME/.imq/admin,其中 $HOME 是控制台用户的主目录。
客户机的兼容性
从 iMQ 2.0 升级到 MQ 3.0.1 时,您应当考虑以下问题:
- MQ 3.0.1 代理将支持 iMQ 2.0 客户机运行时(但无附加的 MQ 3.0.1 功能),但是 iMQ 2.0 代理将不支持 MQ 3.0.1 客户机运行时。
- 构建于 JDK 1.2、1.3 或 1.4 上的 JMS 客户机可以与运行 JRE 1.4 的代理兼容。但是,如果使用安全(基于 SSL)连接与代理连接的客户机不是构建于 JDK 1.4(包含 JSSE 和 JNDI 库)之上,则还需要这些库。
- JMS 1.1 API(受 MQ 3.0.1 支持)阐明了 Message.acknowledge() 方法的性能,该方法用于确认 CLIENT_ACKNOWLEDGE 会话中的消息使用情况。这可能需要您修改现有的 JMS 客户机。
已知限制本节所示的限制根据其适用性(适用于 MQ 3.0.1 企业版和平台版还是仅适用于企业版)进行了分类。
适用于企业版和平台版
- 根据待办事项大小的最大值,Windows 平台设置了可以同时通过 TCP/IP 启动的与代理之间的连接的数量限制。待办事项是 TCP 堆栈中连接的缓冲区(TCP 连接同时启动的数量不能超过待办事项的大小)。例如,Windows 2000 Professional 将待办事项的数量限制为 5 个,而 Windows 2000 Server 将待办事项的数量限制为 200 个。
- 只有已经至少启动一次代理实例后,才可以对代理的实例配置文件进行编辑。这是因为只有先启动代理实例,config.properties 文件才能存在。要配置代理以使用可插入的持久性或设置其它配置属性,请运行一次代理(使用用于创建该代理的实例名称)以创建 config.properties 文件:
仅适用于企业版
- 代理的共享线程池模型不能在 Windows 平台上运行(由于 J2SE 1.4.0 中的错误)。这个错误预计在 J2SE 1.4.1 中进行更正,但还没有进行测试。
- 本发行版中只支持完全连接的代理群集。这意味着群集中的每个代理均必须与群集中的所有其它代理直接通信。如果使用 imqbrokerd -cluster 命令行变量连接代理,请务必小心以确保包含了群集中的所有代理。
- 如果代理群集中未使用主代理,则将要添加到群集中的代理中存储的持久性信息将不会传播到群集中的其它代理中。
- 使用 SSL 的连接服务当前仅限于支持自签名的服务器证书(即信任主机模式)。默认情况下,连接配置属性 imqSSLIsHostTrusted 被设置为“真”。
- 使用 HTTP 传输的 JMS 客户机突然终止时(例如使用 Ctrl-C),代理要花费大约一分钟的时间才能释放客户机连接和所有关联的资源。
如果在这一分钟内客户机的另一个实例被启动,并且该实例尝试使用同一 ClientID、长期订阅或队列,则可能会收到“资源冲突”的异常。这实际上不是什么问题,只是上述终止过程的副作用。如果客户机在延迟约一分钟后启动了,则应当一切正常。
已知错误本节包含 MQ 3.0.1 SP2 发行时已知的更加重要的错误的列表。
有关当前错误、错误的状态和解决方法的列表,Java Developer Connection 成员应参见 Java Developer Connection Web 站点上的“Bug Parade”页面。在报告新的错误之前请先检查该页面。尽管这里没有列出所有的 MQ 错误,但如果您想了解是否已报告了某个问题,这里可以作为一个很好的起点。
相关页面:
要报告新的错误或提交功能请求,请发送邮件到 imq-feedback@sun.com。
Message Queue 3.0.1 版本中已更正的错误以下为 MQ 3.0.1、3.0.1 SP1 和 3.0.1 SP2 中已更正的最重要错误的简要说明。
有关 MQ 3.0 中已更正的错误,请参阅可以从以下网址获取的 MQ 3.0 发行说明:
有关以下任一已更正错误的详细信息,您可以在以下 Java Developer Connection 站点查阅完整的报告:
JMS 中标记为可选的功能JMS 规范指出了某些项是可选的 - 每个 JMS 提供商(供应商)可以选择是否实现这些项。MQ 产品对这些可选项的处理如下所示:
技术说明本节包含有关以下主题的简短说明:
系统时钟设置
使用 MQ 系统时,同步系统时钟应小心并避免将它们设置为早于当前时间。
建议同步
建议您同步所有与 MQ 系统交互的主机上的时钟。这在使用消息失效期 (TimeToLive) 时尤为重要。未同步主机的时钟可能会导致 TimeToLive 不按预期的方式工作(消息可能无法传送)。您应在启动任何代理之前同步时钟。
Solaris 您可以在本地主机上运行 rdate 命令以与远程主机进行同步。(您必须为超级用户 [即root 用户] 才能运行此命令。)例如,以下命令将本地主机(称为 Host 2)与远程主机 Host1 同步:
Linux 命令类似于 Solaris,但必须提供 -s 选项:
Windows 您可以运行带有时间子命令的网络命令将本地主机与远程主机同步。例如,以下命令将本地主机(称为 Host 2)与远程主机 Host1 同步:
避免将系统时钟设置为早于当前时间
您应避免在运行 MQ 代理的系统上将系统时钟设置为早于当前时间。MQ 使用时间戳来帮助标识诸如事务和长期订阅这样的内部对象。如果系统时钟设置为早于当前时间,理论上有可能生成重复的内部标识符。代理将尝试通过为标识符引入一些随机性以及通过在运行时检测时钟偏差来补偿这种情况,但是如果代理未运行时将系统时钟调整为远远早于当前时间,则会有少量出现标识符重复的可能性。
如果需要在运行代理的系统上将系统时钟设置调整为早于当前时间若干秒钟,建议您在没有事务和长期订阅,或在代理没有运行时执行此操作,然后在代理进行备份之前等候一段时间(时钟偏差的时间)。
不过最理想的方法是在启动任何代理前先同步时钟,然后使用适当的技术确保部署后时钟不会明显出现偏差。
OS 定义的客户机和代理的连接限制
在 Solaris 和 Linux 平台上,客户机或代理在其中运行的 shell 对客户机可以使用的文件描述符的数量进行了不严格的限制。在 MQ 系统中,客户机创建的每个连接,或代理接受的每个连接都使用其中一种文件描述符。因此,如果不更改此限制,Solaris 上代理或客户机运行的连接不能超过 256 个,Linux 上为 1024 个。(由于有些文件描述符要用于其它目的,例如用于基于文件的持久性,所以实际的数量略少于此。)
要更改此限制,请参见 ulimit 手册页或后面所述的增加文件描述符以提高基于文件的持久性性能中的说明。此限制需在客户机或代理要在其中执行的每个 shell 中更改。
增加文件描述符以提高基于文件的持久性性能
在 Solaris 和 Linux 平台上,在默认的基于文件的持久性中存储消息的速度受可用于文件存储的文件描述符数量的影响。(Windows 没有文件描述符限制。)大量描述符使系统可以更快地处理大量的持久性消息。
要提高性能测试或部署的性能,管理员应增大可用于应用程序(在此情况下,为代理进程)的文件描述符的最大数量,然后通过更新属性的值来增加代理使用的共享文件描述符池的大小。
此属性的值必须小于系统中可用的文件描述符的最大数量。
例如,在 Solaris 中,您可以使用 ulimit 命令来增大文件描述符限制。进程将从其父(登录)shell 继承系统限制。在 Solaris 中,存在一个“严格”限制和一个“不严格”限制。对于非 root 用户,应用程序文件描述符的数量不能超过不严格限制,而不严格限制依次不能超过严格限制。
检查当前文件描述符限制的命令:
为“根”用户更改文件描述符限制的命令:
此后,从此 shell 创建的任何进程都可以打开不受限制的文件描述符。所以此时运行 imqbroker 命令是安全的。
为非 root 用户更改文件描述符限制的命令:
其中 number1 小于 1024,number2 小于 number1。
如果要大于 1024,您可以使用以下选项:
保护持久性数据安全
代理使用持久性存储,它包含与其它信息一起临时存储的消息文件。由于这些消息可能包含专用信息,所以建议您保护数据存储以防止未授权的访问。
代理可以使用内置的持久性,也可以使用插入的持久性。
内置持久性存储
使用内置持久性的代理将持久性数据写入平面文件数据存储,它位于:
其中 brokerName 为标识代理实例的名称。
第一次启动代理实例时,将创建 brokerName/filestore/ 目录。保护此目录的过程取决于运行代理的操作系统。
Solaris 和 Linux IMQ_VARHOME/instances/brokerName/filestore/ 目录上的权限取决于启动代理实例的用户的 umask。因此,可以通过适当设置 umask 来限制启动代理实例并读取其持久性文件的权限。或者,管理员(超级用户)可以通过将 IMQ_VARHOME/instances 目录上的权限设为 700 来保护持久性数据。
Windows 可以通过您使用的 Windows 操作系统提供的机制来设置 IMQ_VARHOME/instances/brokerName/filestore/ 目录上的权限。这通常涉及打开目录的属性对话。
插入的持久性存储
使用插入的持久性的代理向 JDBC 兼容数据库写入持久性数据。
对于由数据库服务器(例如 Oracle 数据库)管理的数据库,建议您创建一个用户名和密码来访问 MQ 数据库表(名称以“IMQ”开头的表)。如果数据库不允许保护单个表,请创建一个仅由 MQ 代理使用的专用数据库。请参见数据库供应商提供的文档,以了解如何创建用户名/密码访问。
代理打开数据库连接所需的用户名和密码可以作为代理配置属性提供。但是,启动代理时将它们作为命令行选项提供更为安全(请参见《MQ Administrator's Guide》的附录 A“Setting Up Plugged-in Persistence”)。
对于代理通过数据库的 JDBC 驱动程序(例如 Cloudscape 数据库)直接访问的嵌入式数据库,通常通过在要存储持久性数据的目录上设置文件权限(如以上内置持久性存储中所述)来提供安全性。请确保代理和 imqdbmgr 实用程序都可以读取和写入数据库,但是,两者应由同一用户运行。
代理内存配置
当代理快要耗尽 Java 对象使用的 JVM 堆空间时,它将使用各种技术(如流控制和消息交换)来释放内存。在极端情况下,代理甚至关闭客户机连接以释放内存和减少消息内流。所以最好将最大 JVM 堆空间设置得足够高,以避免这种情况。
但是,与系统的物理内存相比,如果最大 Java 堆空间设置过高,代理将继续增大 Java 堆空间,直至整个系统耗尽内存。这会导致性能的降低、不可预计的代理崩溃和/或影响系统中运行的其它应用程序和服务的行为。
可以通过使用 -Xmx Java 命令行参数配置合理的 Java 堆大小限制来避免此问题。总的说来,估算正常和峰值系统内存足迹,并配置 Java 堆大小,使其足以提供良好性能但又不至于过大而引起系统内存问题,是一种很好的方法。
客户机内存不足错误
如果您运行的是处理较大消息或许多小消息的 JMS 客户机,它可能会遇到 OutOfMemoryError 错误。客户机运行时没有内存泄漏 - 它只是没有足够的内存从网络复制消息并将它们传送给客户机。
要消除这些 OutofMemoryError 错误,请增大最大 Java 堆大小。您可以通过将适当的命令行选项传送给 java 或 jre 命令来执行此操作。
在 Java2 上,在运行客户机应用程序时使用 -Xmx 选项。例如:
请注意以下限制:
如何报告问题要报告问题,请发送邮件到 imq-feedback@sun.com。
如果您签有支持合同并遇到 MQ 问题,请使用以下方法之一联系 Sun ONE 用户支持:
- Sun ONE 在线支持 Web 站点 http://www.sun.com/service/sunone/software/index.html
为使我们能够更好地帮助您解决问题,请在联系支持人员时准备好以下信息:
了解详细信息除了 MQ 文档,您还可以找到如下所述的其它信息。
论坛
Sun ONE 软件论坛
以下网址有一个 Sun ONE MQ 论坛:
Java 技术论坛
Java 技术论坛中有一个您可能感兴趣的 JMS 论坛。
Sun 欢迎您提出宝贵意见
Sun 非常愿意改进其文档,并欢迎您提出意见和建议。请将您的意见通过电子邮件发送到 Sun 的以下地址:
请在主题行中注明文档的部件号 (817-3829-10),并在电子邮件的正文中注明书名(《Message Queue 3.0.1 发行说明》)。
其它 Sun 资源您可以从以下 Internet 位置找到有用的 Sun ONE 信息:
- Sun ONE Message Queue 的文档
http://docs.sun.com/coll/S1_MessageQueue_301- Sun ONE Message Queue 产品信息
http://sun.com/software/message_queue- Sun ONE 文档
http://docs.sun.com/prod/sunone- Sun ONE 专业服务
http://www.sun.com/service/sunps/sunone- Sun ONE 软件产品和服务
http://www.sun.com/software- Sun ONE 软件支持服务
http://www.sun.com/service/sunone/software- Sun ONE 支持和知识库
http://www.sun.com/service/support/software- Sun 支持和培训服务
http://www.sun.com/supportraining- Sun ONE 咨询和专业服务
http://www.sun.com/service/sunps/sunone- Sun ONE 开发者信息
http://sunonedev.sun.com- Sun 开发者支持服务
http://www.sun.com/developers/support- Sun ONE 软件培训
http://www.sun.com/software/training- Sun 软件数据表
http://wwws.sun.com/software
版权所有 © 2003 Sun Microsystems, Inc。保留所有权利。
Sun、Sun Microsystems、Sun 徽标、Solaris、Java、Java 咖啡杯徽标、JDBC 和 JDBC Compliant 是 Sun Microsystems, Inc. 在美国和其它国家或地区的商标或注册商标。Sun ONE Message Queue 的使用受附带的许可协议中说明条款的限制。