Sun Java System Message Queue 3 2005Q4 管理指南 |
第 3 章
启动代理和客户端安装 Sun Java System Message Queue 并执行一些准备步骤后,即可开始启动代理和客户端。代理的配置是由一组配置文件控制的,传递给代理实用程序 (imqbrokerd) 的命令行选项可以覆盖这些配置文件;有关更多信息,请参见第 4 章“配置代理”。
本章包含以下各节:
准备系统资源在启动代理之前,需要执行两项系统级别的准备任务:同步系统时钟,以及(在 Solaris 或 Linux 平台上)设置文件描述符限制。以下各节介绍了这些任务。
同步系统时钟
在启动任何代理或客户端之前,同步将要与 Message Queue 系统进行交互的所有主机的时钟至关重要。如果使用消息到期(生存时间)功能,则同步尤为重要。来自未同步时钟的时间戳可能会使消息到期功能无法按预期方式工作,并且可能会使消息无法传送。同步对于代理群集同样至关重要。
应该对系统进行配置以运行时间同步协议,如简单网络时间协议 (Simple Network Time Protocol, SNTP)。通常,Solaris 和 Linux 中的 xntpd 守护进程以及 Windows 中的 W32Time 服务支持时间同步。(有关配置此服务的信息,请参见操作系统文档。)代理运行后,要避免往回设置系统时钟。
设置文件描述符限制
在 Solaris 和 Linux 平台上,运行客户端或代理的 shell 对进程可以使用的文件描述符数量的限制不是很严格。在 Message Queue 中,客户端创建的每个连接或代理接受的每个连接都使用其中一个文件描述符。每个具有持久性消息的物理目标也使用文件描述符。
因此,文件描述符限制限定了代理或客户端可以具有的连接数。默认情况下,Solaris 最多可具有 256 个连接,Linux 最多可具有 1024 个连接。(在实践中,由于将文件描述符用于持久性,因此连接限制实际上低于此值。)如果您需要的连接数高于此值,则必须提高将要执行客户端或代理的每个 shell 中的文件描述符限制。有关如何执行此操作的信息,请参见 ulimit 手册页。
启动代理可以使用 Message Queue 命令行实用程序或 Windows 的“开始”菜单以交互方式启动代理,也可以安排在系统启动时自动启动代理。以下各节介绍了操作方法。
以交互方式启动代理
可以使用代理实用程序 (imqbrokerd) 从命令行中以交互方式启动代理。(或者,也可以从 Windows 的“开始”菜单中启动代理。)不能使用管理控制台 (imqadmin) 或命令实用程序 (imqcmd) 启动代理;只有在代理已经运行后才能使用这些工具。
在 Solaris 和 Linux 平台上,代理实例必须始终由最初启动该实例的用户启动。每个代理实例都有其自身的一组配置属性和基于文件的消息存储。首次启动代理实例时,Message Queue 将使用用户的文件创建模式掩码 (umask) 来设置该代理实例的配置信息和持久性数据所在目录的权限。
默认情况下,代理实例具有实例名称 imqbroker。要从命令行中使用此名称和默认配置启动代理,只需使用以下命令:
imqbrokerd
此命令使用端口映射器的默认端口 7676 启动本地计算机上名为 imqbroker 的代理实例(请参见端口映射器)。
要指定非默认的实例名称,请使用 imqbrokerd 命令的 name 选项。以下命令启动实例名称为 myBroker 的代理:
imqbrokerd -name myBroker
在 imqbrokerd 命令行中,还可以使用其他选项来控制代理操作的各个方面。下面的示例使用 tty 选项向命令窗口发送错误消息和警告(标准输出):
imqbrokerd -name myBroker -tty
也可以在命令行中使用 -D 选项来覆盖在代理实例配置文件 (config.properties) 中指定的属性值。下面的示例设置 imq.jms.max_threads 属性,将 jms 连接服务可用的最大线程数提高到 2000:
imqbrokerd -name myBroker -Dimq.jms.max_threads=2000
有关 imqbrokerd 命令的语法、子命令和选项的完整信息,请参见代理实用程序。要了解此信息的简要概述,请输入以下命令:
imqbrokerd -help
自动启动代理
可以将代理设置为在系统启动时自动启动,而不是在命令行中明确启动它。具体操作方法取决于运行代理的平台(Solaris、Linux 或 Windows)。
在 Solaris 和 Linux 上自动启动
在 Solaris 和 Linux 系统上,使代理可以自动启动的脚本在 Message Queue 安装期间放在 /etc/rc* 目录树中。要允许使用这些脚本,您必须按如下所示编辑配置文件 /etc/imq/imqbrokerd.conf (Solaris) 或 /etc/opt/sun/mq/imqbrokerd.conf (Linux):
在 Windows 上自动启动
要在 Windows 系统启动时自动启动代理,必须将代理定义为 Windows 服务。代理将在系统启动时启动并在后台运行,直到系统关闭。因此,不要使用 imqbrokerd 命令启动代理,除非您希望启动其他实例。
系统最多只能有一个作为 Windows 服务运行的代理。任务管理器将此类代理作为两个可执行进程列出:
在 Windows 系统上,可以在安装 Message Queue 时将代理作为服务安装。安装后,可以使用服务管理器实用程序 (imqsvcadmin) 执行以下操作:
要将启动选项传递给代理,请使用 imqsvcadmin 命令的 -args 参数。其工作方式与 imqbrokerd 命令的 -D 选项相同,如启动代理中所述。可以照常使用命令实用程序 (imqcmd) 来控制代理操作。
有关 imqsvcadmin 命令的语法、子命令和选项的完整信息,请参见服务管理器实用程序。
重新配置代理服务
重新配置作为 Windows 服务安装的代理的过程如下:
重新配置作为 Windows 服务运行的代理
- 停止服务。
- 在 Windows“开始”菜单的“设置”子菜单中选择“控制面板”。
- 打开“管理工具”控制面板。
- 使用以下方法运行“服务”工具:选择该工具的图标,然后从“文件”菜单或弹出的上下文菜单中选择“打开”,或者仅双击该图标即可。
- 在“服务(本地)”下,选择 "Message Queue Broker" 服务,然后从“操作”菜单中选择“属性”。
或者,也可以在 "Message Queue Broker" 上单击鼠标右键,然后从弹出的上下文菜单中选择“属性”,或者仅双击 "Message Queue Broker" 即可。无论在哪种情况下,都会显示“Message Queue Broker 属性”对话框。
- 在“属性”对话框中的“常规”选项卡下,单击“停止”以停止代理服务。
- 删除服务。
在命令行中输入以下命令:
imqsvcadmin remove
- 重新安装服务,并使用 -args 选项指定不同的代理启动选项,或使用 -vmargs 选项指定不同的 Java 版本参数。
例如,要将服务的主机名和端口号分别更改为 broker1 和 7878,可以使用以下命令:
imqsvcadmin install -args "-name broker1 -port 7878"
使用可选 Java 运行时
可以使用 imqsvcadmin 命令的 -javahome 或 -jrehome 选项指定可选 Java 运行时的位置。(还可以在服务“属性”对话框“常规”选项卡下的“启动参数”字段中指定这些选项。)
显示代理服务启动选项
要确定代理服务的启动选项,请使用 imqsvcadmin 命令的 query 选项,如代码示例 3-1 中所示。
服务启动问题疑难解答
如果试图启动作为 Windows 服务的代理时出现错误,您可以查看记录的错误事件:
查看记录的服务错误事件
删除代理删除代理的过程也因平台而异,如以下各节所述。
删除 Solaris 或 Linux 上的代理
要删除 Solaris 或 Linux 平台上的代理实例,可以使用具有 -remove 选项的 imqbrokerd 命令。命令的格式如下:
imqbrokerd [options...] -remove instance
例如,如果代理名称为 myBroker,则此命令应为:
imqbrokerd -name myBroker -remove instance
此命令将删除指定代理的整个实例目录。
如果将代理设置为在系统启动时自动启动,请编辑配置文件 /etc/imq/imqbrokerd.conf (Solaris) 或 /etc/opt/sun/mq/imqbrokerd.conf (Linux),将 AUTOSTART 属性设置为 NO。
有关 imqbrokerd 命令的语法、子命令和选项的完整信息,请参见代理实用程序。要了解此信息的简要概述,请输入以下命令:
删除 Windows 代理服务
要删除作为 Windows 服务运行的代理,请使用以下命令:
imqcmd shutdown bkr
关闭代理,随后使用以下命令:
imqsvcadmin remove
删除服务。
或者,也可以使用 Windows 的服务工具(可通过管理工具控制面板访问)来停止和删除代理服务。
删除代理服务后请重新启动计算机。
启动客户端启动客户端应用程序之前,请向应用程序开发者了解有关如何设置系统的信息。如果要启动 Java 客户端应用程序,则必须正确设置 CLASSPATH 变量,并确保安装了正确的 .jar 文件。Message Queue Developer's Guide for Java Clients 中包含有关系统设置常规步骤的信息,但开发者可能会提供额外信息。
要启动 Java 客户端应用程序,请使用以下命令行格式:
java clientAppName
要启动 C 客户端应用程序,请使用应用程序开发者提供的格式。
应用程序文档应提供有关应用程序设置的属性值的信息;您可能希望通过命令行覆盖其中某些属性值。您可能还希望在命令行中为使用 Java 命名和目录接口 (Java Naming and Directory Interface, JNDI) 查找来查找连接工厂的任何 Java 客户端指定属性。如果查找返回的连接工厂比应用程序旧,则该连接工厂可能不支持较新的属性。在这种情况下,Message Queue 将这些属性设置为默认值;如有必要,可以使用命令行覆盖这些默认值。
要从命令行中为 Java 应用程序指定属性值,请使用如下语法:
java [[-Dattribute=value]...] clientAppName
attribute 的值必须是连接工厂受管理对象属性,如第 16 章“受管理对象属性参考”中所述;如果值中包含空格,请在命令行 attribute=value 部分的两端加上引号。
以下示例将启动一个名为 MyMQClient 的客户端应用程序,该示例连接到主机 OtherHost 上位于端口 7677 的代理:
java -DimqAddressList=mq://OherHost:7677/jms MyMQClient
在命令行上指定的主机名和端口会覆盖应用程序自身设置的任何其他主机名和端口。
在某些情况下无法使用命令行来指定属性值。管理员可以将受管理对象设置为只允许读取访问,应用程序开发者也可以通过对客户端应用程序进行编码来实现此目的。与应用程序开发者进行沟通非常必要,这有助于了解启动客户端程序的最佳途径。