Sun Java System Application Server Enterprise Edition 8.1 2005Q2 管理指南

第 4 章 配置 Java 消息服务资源

本章介绍了如何为使用 Java 消息服务 (Java Message Service, JMS) 的应用程序配置资源。它包含以下小节:

关于 JMS 资源

Application Server 中的 JMS 提供者

Application Server 通过将 Sun Java System Message Queue(以前的 SUN ONE Message Queue)集成到 Application Server 中,实现了 Java 消息服务 (Java Message Service, JMS) API。对于基本的 JMS API 管理任务,请使用 Application Server 管理控制台。对于高级任务(包括管理 Message Queue 群集),请使用 MQ-install-dir/imq/bin 目录中提供的工具。

有关管理 Messge Queue 的详细信息,请参见 Message Queue Administration Guide

JMS 资源

Java 消息服务 (Java Message Service, JMS) API 使用两种被管理对象:

这些对象是以管理方式创建的,创建对象的方式特定于每个 JMS 实现。在 Application Server 中,执行以下任务:

应用程序使用来访问连接工厂和目标资源。通常,JMS 应用程序至少使用一个连接工厂和一个目标。要了解所需创建的资源,请仔细研究应用程序或向应用程序开发者进行咨询。

连接工厂分为三种类型:

目标有两种类型:

The J2EE 1.4 Tutorial》中有关 JMS 的章节提供了这两种通信和 JMS 其他方面的详细信息(请参见 http://java.sun.com/j2ee/1.4/docs/tutorial/doc/index.html)。

创建资源的顺序并不重要。

对于 J2EE 应用程序,请在 Application Server 部署描述符中指定连接工厂和目标资源,如下所示:

JMS 资源与连接器资源之间的关系

Application Server 通过使用名为 jmsra 的系统资源适配器实现 JMS。用户创建 JMS 资源时,Application Server 会自动创建连接器资源,这些资源将显示在管理控制台树视图的“连接器”节点下。

对于用户创建的每个 JMS 连接工厂,Application Server 都将为其创建连接器连接池和连接器资源。对于用户创建的每个 JMS 目标,Application Server 都将为其创建管理对象资源。用户删除 JMS 资源时,Application Server 将自动删除连接器资源。

可以通过使用管理控制台的“连接器”节点(而不是“JMS 资源”节点)来为 JMS 系统资源适配器创建连接器资源。有关详细信息,请参见第 7 章,连接器资源

有关 JMS 连接工厂的管理控制台任务

Procedure创建 JMS 连接工厂资源

  1. 在树组件中,展开“资源”节点,然后展开“JMS 资源”节点。

  2. 选择“连接工厂”节点。

  3. 在“JMS 连接工厂”页面中,单击“新建”。

    将出现“创建 JMS 连接工厂”页面。

  4. 在“JNDI 名称”字段中,键入连接工厂的名称。

    建议使用 JMS 资源的命名子上下文前缀 jms/。例如:jms/ConnectionFactory1

  5. 从“类型”下拉式列表中,选择 javax.jms.ConnectionFactoryjavax.jms.QueueConnectionFactoryjavax.jms.TopicConnectionFactory

  6. 选中“已启用”复选框以在运行时启用该资源。

  7. 在“高级”区域中,更改连接工厂属性所需的值。

    有关这些属性的详细信息,请参见编辑 JMS 连接工厂资源。Application Server 会将这些属性应用到为连接工厂创建的连接器连接池。

  8. 对于 JMS 连接工厂资源,请按照如下所示指定事务支持的值:

    • 对于可用于事务的资源,指定 XATransaction(默认值),这些事务使用事务范围内多个资源。

      例如,此资源和 JDBC 资源、连接器资源或其他 JMS 连接工厂资源。此值提供最大的灵活性。配置为 XATransaction 的资源将参与分为两个阶段的提交操作。

    • 对于事务(仅使用事务范围内的唯一一种资源)可以使用的资源或在使用多个 XA 资源的分布式事务中用作最后一个代理的资源,指定 LocalTransaction

      此值提供更好的性能。配置为 LocalTransaction 的资源将不被用于分为两个阶段的提交操作。

    • 对于永远无法参与事务的资源,指定 NoTransaction

      JMS 应用程序中限用此设置。

  9. 在“其他属性”区域中,为应用程序所需的属性提供值。下表列出了可用的属性。

    属性名称 

    说明 

    ClientId

    为长期订户将要使用的连接工厂指定客户机 ID。 

    AddressList

    指定应用程序将与其进行通信的消息代理实例的名称(和端口号 [可选] )。列表中的每个地址都指定了要连接的主机名(和端口号和连接服务 [可选])。例如,该值可能为 earthearth:7677。当消息代理在默认端口 (7676) 以外的端口上运行时,请指定端口号。如果属性设置指定了群集环境中的多个主机和端口,则将使用该列表中的第一个可用主机(除非将 AddressListBehavior 属性设置为 RANDOM)。

    有关详细信息,请参见 Message Queue Developer’s Guide for Java Clients

    默认值:本地主机和默认端口号 (7676)。客户机将尝试连接至位于本地主机端口 7676 上的代理。 

    Message Service AddressList

    AddressList 相同。此属性名已过时。请使用 AddressList 代替。

    UserName

    进入连接工厂的用户名。 

    默认值:guest

    Password

    进入连接工厂的密码。 

    默认值:guest

    Reconnect Enabled

    如果启用该属性(值 = true),则指定客户机运行时在丢失连接时尝试重新连接至消息服务器(或 AddressList 中的地址列表)。

    默认值:TRUE 

    Reconnect Attempts

    指定客户机运行时在尝试连接 AddressList 列表中的下一个地址之前尝试连接(或重新连接)列表中每个地址的次数。值 -1 表示重新连接尝试次数没有限制(客户机运行时将尝试连接至第一个地址,直到连接成功)。

    默认值:3 

    Reconnect Interval

    指定重新连接尝试之间的时间间隔(毫秒)。此属性适用于对 AddressList 中每个地址的尝试,及对该列表中连续地址的尝试。如果该时间间隔太短,则代理将没有时间恢复。如果该时间间隔太长,则重新连接可能会指明这是不可接受的延迟。

    默认值:30000 

    AddressList Behavior

    指定是按 AddressList 属性中的地址顺序 (PRIORITY) 还是按随机顺序 (RANDOM) 进行连接尝试。

    RANDOM 表示重新连接将从 AddressList 中随机选择一个地址。如果许多客户机尝试使用同一个连接工厂来进行连接,则该值将阻止它们全部连接至同一个地址。

    PRIORITY 表示重新连接始终尝试连接 AddressList 中的第一个服务器地址,并且仅在第一个代理不可用时才使用其他地址。

    默认值:RANDOM

    AddressList Iterations

    指定客户机运行时建立(或重新建立)连接时,在 AddressList 中重复的次数。值 -1 表示尝试次数没有限制。

    默认值:3 

  10. 在“目标”区域中,执行以下操作:

    1. 从“可用”列中选择将要部署使用了资源的应用程序的一个或多个目标。

      可用目标包括可用群集和可用服务器实例,以及默认服务器实例 server

    2. 单击“添加”以将目标移动到“选定”列中。

  11. 单击“确定”以保存连接工厂。

等效的 asadmin 命令

create-jms-resource

Procedure编辑 JMS 连接工厂资源

  1. 在树组件中,展开“资源”节点,然后展开“JMS 资源”节点。

  2. 展开“连接工厂”节点。

  3. 选择要编辑的连接工厂。

  4. 在“编辑 JMS 连接工厂”页面中,可以执行以下任务:

    • 修改“说明”字段中的文本。

    • 选中或取消选中“已启用”复选框以启用或禁用资源。

    • 更改“高级”区域中的属性值。

    • 添加、删除或修改属性。

  5. 或者,单击“目标”选项卡以转至“JMS 连接工厂资源目标”页面。在此页面中,执行以下操作:

    1. 单击“管理目标”以打开“管理资源目标”页面。

      在此页面中,在“可用”列与“选定”列之间移动目标。确保将要部署使用了资源的应用程序的目标放入“选定”列中。可用目标包括可用群集和可用服务器实例,以及默认的服务器实例 server。单击“确定”以保存更改。

    2. 选中目标的复选框,然后单击“启用”或“禁用”,以启用或禁用目标的资源。

  6. 单击“保存”以保存更改。

Procedure删除 JMS 连接工厂资源

  1. 在树组件中,展开“资源”节点,然后展开“JMS 资源”节点。

  2. 选择“连接工厂”节点。

  3. 在“JMS 连接工厂”页面中,选中要删除的连接工厂的名称旁边的复选框。

  4. 单击“删除”。

等效的 asadmin 命令

delete-jms-resource

有关 JMS 目标资源的管理控制台任务

Procedure创建 JMS 目标资源

  1. 在树组件中,展开“资源”节点,然后展开“JMS 资源”节点。

  2. 选择“目标资源”节点。

  3. 在“JMS 目标资源”页面中,单击“新建”。将出现“创建 JMS 目标资源”页面。

  4. 在“JNDI 名称”字段中,键入资源的名称。

    建议的做法是对 JMS 资源使用命名子上下文前缀 jms/ 。例如:jms/Queue

  5. 从“类型”下拉式列表中,选择 javax.jms.Topicjavax.jms.Queue

  6. 选中“已启用”复选框以在运行时启用该资源。

  7. 在“其他属性”区域中,为各个属性提供值。

    下表列出了可用的属性。

    属性名称 

    说明 

    Name

    (必需)资源引用的物理目标的名称。 

    Description

    物理目标的说明。 

  8. 在“目标”区域中,执行以下操作:

    1. 从“可用”列中选择将要部署使用了资源的应用程序的一个或多个目标。

      可用目标包括可用群集和可用服务器实例,以及默认的服务器实例 server

    2. 单击“添加”以将目标移动到“选定”列中。

  9. 单击“确定”。

等效的 asadmin 命令

create-jms-resource

Procedure编辑 JMS 目标资源

  1. 在树组件中,展开“资源”节点,然后展开“JMS 资源”节点。

  2. 展开“目标资源”节点。

  3. 选择要编辑的目标资源。

  4. 在“编辑 JMS 目标资源”页面中,可以执行以下任务:

    • 更改资源的类型。

    • 修改“说明”字段中的文本。

    • 选中或取消选中“已启用”复选框以启用或禁用资源。

    • 添加、删除或修改 Name 或 Description 属性。

  5. 单击“保存”以保存更改。

  6. 或者,单击“目标”选项卡转至“JMS 目标资源目标”页面。在此页面中,执行以下操作:

    1. 单击“管理目标”以打开“管理资源目标”页面。

      在此页面中,在“可用”列与“选定”列之间移动目标。确保将要部署使用了资源的应用程序的目标放入“选定”列中。可用目标包括可用群集和可用服务器实例,以及默认的服务器实例 server。单击“确定”以保存更改。

    2. 选中目标的复选框,然后单击“启用”或“禁用”,以启用或禁用目标的资源。

Procedure删除 JMS 目标资源

  1. 在树组件中,展开“资源”节点,然后展开“JMS 资源”节点。

  2. 选择“目标资源”节点。

  3. 在“JMS 目标资源”页面中,选中要删除的目标资源的名称旁边的复选框。

  4. 单击“删除”。

等效的 asadmin 命令

delete-jms-resource

有关 JMS 物理目标的管理控制台任务

Procedure创建 JMS 物理目标

要进行生产,务必创建物理目标。但是,在开发和测试阶段,不需要执行此步骤。应用程序首次访问目标资源时,Message Queue 会自动创建目标资源的 Name 属性指定的物理目标。该物理目标是临时的,并且将在 Message Queue 配置属性指定的时间段后过期。

  1. 在树组件中,展开“配置”节点,然后展开“Java 消息服务”节点。

  2. 选择要配置的实例:

    • 要配置特定的实例,请选择该实例的配置节点。例如,对于默认实例 server,请选择 server-config 节点。

    • 要为将来的实例 (使用 default-config 副本)配置默认设置,请选择 default-config 节点。

  3. 选择“物理目标”节点。

  4. 在“物理目标”页面中,单击“新建”。

    将出现“创建物理目标”页面。

  5. 在“物理目标名称”字段中,键入目标的名称(例如,PhysicalQueue)。

  6. 从“类型”下拉式列表中,选择 topicqueue

  7. 在“其他属性”区域中,单击“添加属性”以添加属性。

    下表列出了当前可用的一个属性。

    属性名称 

    说明 

    maxNumActiveConsumers

    可以在从队列目标的负载平衡传送中处于活动状态的使用者的最大数目。如果值为 - 1,则表示没有数目限制。如果目标是为独立服务器实例创建的,则默认值为 1;如果目标是为群集创建的,则默认值为 -1。 

    要修改此属性的值或指定其他物理目标属性,请使用 MQ-install-dir/imq/bin/imqcmd 命令。有关更多信息,请参见 Message Queue Administration Guide

  8. 单击“确定”。

等效的 asadmin 命令

create-jmsdest

系统目标

“物理目标”页面显示系统目标,即过期和无法传送的消息被重定向到的队列 mq.sys.dmq。可以为此目标创建目标资源、使用者和浏览器,但不能删除或向其发送消息。

Procedure删除 JMS 物理目标

  1. 在树组件中,展开“配置”节点,然后展开“Java 消息服务”节点。

  2. 选择要配置的实例:

    • 要配置特定的实例,请选择该实例的配置节点。例如,对于默认实例 server,请选择 server-config 节点。

    • 要为将来的实例 (使用 default-config 副本)配置默认设置,请选择 default-config 节点。

  3. 选择“物理目标”节点。

  4. 在“物理目标”页面中,选中要删除的目标的名称旁边的复选框。

  5. 单击“删除”。

    如果尝试删除系统目标 mq.sys.dmq,将显示错误消息。

等效的 asadmin 命令

delete-jmsdest

有关 JMS 提供者的管理控制台任务

Procedure配置 JMS 提供者的常规属性

使用“JMS 服务”页面配置所有 JMS 连接都使用的属性。

有关配置 JMS 服务的更多信息,请参见 Application Server Developer’s Guide

  1. 在树组件中,选择“配置”节点。

  2. 选择要配置的实例:

    • 要配置特定的实例,请选择该实例的配置节点。例如,对于默认实例 server,请选择 server-config 节点。

    • 要为将来的实例 (使用 default-config 副本)配置默认设置,请选择 default-config 节点。

  3. 选择“Java 消息服务”节点以打开“JMS 服务”页面。

  4. 要更改 Application Server 在异常中止启动之前等待 JMS 服务启动的时间,请编辑“启动超时”字段中的值。

    在运行缓慢或过载的系统中,在默认超时值 (60) 的基础上增大该值。

  5. 从“类型”下拉式列表中:

    • 选择 LOCALserver-config 配置的默认设置)以访问本地主机上的 JMS 服务。JMS 服务由 Application Server 启动和管理。

    • 选择 REMOTEdefault-config 配置的默认设置 )以访问其他系统或群集上的 JMS 服务。如果选择了 REMOTE,则下一次启动服务器时 JMS 服务不会由 Application Server 启动。而是通过 来启动和管理服务,因而必须单独启动代理。有关启动代理的信息,请参见 Message Queue Administration Guide。如果选择此值并使用了远程主机,请按照编辑 JMS 主机中的说明来指定远程主机的名称。

  6. 在“启动变量”字段中,键入变量以自定义 JMS 服务启动。

    通过 MQ-install-dir/imq/bin/imqbrokerd 命令使用任意可用的变量。

  7. 使用“重新连接”复选框指定连接丢失时,JMS 服务是否尝试重新连接至消息服务器(或 AddressList 中的地址列表)。

    默认情况下,启用重新连接。

  8. 在“重新连接时间间隔”字段中,键入重新连接尝试之间的秒数。

    此设置适用于对 AddressList 中每个地址的尝试,及对该列表中连续地址的尝试。如果该时间间隔太短,则代理将没有时间恢复。如果该时间间隔太长,则重新连接可能会指明这是不可接受的延迟。

    默认值为 60 秒。

  9. 在“重新连接尝试”字段中,键入指定客户机运行时尝试连接(或重新连接)AddressList 列表中每个地址的次数。到达这个值后,客户机运行时将尝试连接列表中的下一个地址。

    值 -1 表示重新连接尝试次数没有限制(客户机运行时将尝试连接至第一个地址,直到连接成功)。默认值为 3。

  10. 从“默认 JMS 主机”下拉式列表中选择一个主机。默认值为 default_JMS_host

  11. 在“地址列表行为”下拉式列表中,选择是按 AddressList 中的地址顺序 (priority) 还是按随机顺序 (random) 来尝试连接。

    priority 表示重新连接始终尝试连接 AddressList 中的第一个服务器地址,并且仅在第一个代理不可用时才使用其他地址。

    如果许多客户机同时尝试使用同一个连接工厂来进行连接,则应指定 random 以防止它们全部连接至同一个地址。

    默认值为 random

  12. 在“地址列表重复”字段中,键入 JMS 服务建立(或重新建立)连接时,在 AddressList 中迭代的次数。

    值 -1 表示尝试次数没有限制。

    默认值为 3。

  13. 在“MQ 模式”和“MQ 服务”字段中,输入 Message Queue 地址模式名称和 Message Queue 连接服务名称(如果要使用非默认模式或服务)。

    消息服务地址的完整语法为


    scheme://address-syntax
    

    其中,schemeaddress-syntax 将在下表中进行介绍。

    MQ 模式和 MQ 服务是下表的前两列中显示的值。

    模式名称 

    连接服务 

    说明 

    地址语法 

    mq

    jmsssljms

    Message Queue 客户机运行时将连接位于指定主机和端口的 MQ 端口映射器。该端口映射器返回动态建立的连接服务端口的列表,然后 Message Queue 客户机运行时将连接托管指定连接服务的端口。 

    [hostName][: port][/serviceName]

    默认值:hostName = localhost, port = 7676, serviceName = jms

    默认值仅适用于 jms 连接服务。对于 ssljms 连接服务,需要指定所有变量。

    示例:mq:MyHost:7677/ssljms

    mqtcp

    jms

    Message Queue 客户机运行时将与指定主机和端口建立 TCP 连接(绕过 MQ 端口映射器)从而建立连接。 

    hostName:port/jms

    示例:mqtcp:localhost:7676/jms

    mqssl

    ssljms

    Message Queue 客户机运行时将与指定主机和端口建立安全 SSL 连接(绕过 MQ 端口映射器)从而建立连接。 

    hostName:port/ssljms

    示例:mqssl:localhost:7676/ssljms

    http

    httpjms

    Message Queue 客户机运行时将与指定 URL 处的 Message Queue 隧道 Servlet 建立 HTTP 连接。(必须按照 Administrator’s Guide 中的描述配置代理,才能访问 HTTP 隧道 Servlet。)

    hostName:port/contextRoot/tunnel

    如果多个代理实例使用同一个隧道 Servlet,则连接特定代理实例(而不是随机选择的实例)的语法为:http://hostName:port/contextRoot/tunnel?serverName=hostName:instanceName

    https

    httpsjms

    Message Queue 客户机运行时将与指定 Message Queue 隧道 Servlet URL 建立安全 HTTPS 连接。(必须按照 Administrator’s Guide 中的描述配置代理,才能访问 HTTPS 隧道 Servlet。)

    hostName:port/contextRoot/tunnel

    如果多个代理实例使用同一个隧道 Servlet,则连接特定代理实例(而不是随机选择的实例)的语法为:http://hostName:port/contextRoot/tunnel?serverName=hostName:instanceName

  14. 在“其他属性”区域中,单击“添加属性”以添加属性。

    下表列出了可用的 Sun Java System Message Queue 代理配置属性。

    属性名称 

    说明 

    instance-name

    指定完整的 Message Queue 代理实例名。默认值为 imqbroker

    instance-name-suffix

    指定要添加到完整的 Message Queue 代理实例名中的后缀。该后缀与实例名之间以下划线字符 (_) 分隔。例如,如果实例名为 imqbroker,则在附加后缀 xyz 之后,实例名将更改为 imqbroker_xyz

    append-version

    如果为 true,则应在完整的 Message Queue 代理实例名后附加主要和次要版本号,这两个版本号之前都有一个下划线字符 (_)。例如,如果实例名为 imqbroker,则在附加版本号之后,实例名将更改为 imqbroker_8_0。默认值为 false

  15. 单击“保存”以保存更改,或者单击“装入默认值”以恢复服务的默认值。

访问远程服务器

将提供者和主机更改到远程系统将使所有 JMS 应用程序在远程服务器上运行。要同时使用本地服务器和一个或多个远程服务器,请使用 AddressList 属性创建连接工厂资源,从而创建访问远程服务器的连接。请参见创建 JMS 连接工厂资源

Procedure检验 JMS 服务设置

  1. 在树组件中,选择“配置”节点。

  2. 选择要配置的实例:

    • 要配置特定的实例,请选择该实例的配置节点。例如,对于默认实例 server,请选择 server-config 节点。

    • 要为将来的实例 (使用 default-config 副本)配置默认设置,请选择 default-config 节点。

  3. 选择“Java 消息服务”节点以打开“JMS 服务”页面。

  4. 单击 "Ping"。

    如果 JMS 服务已启动并且正在运行,则将显示消息“Ping 成功:JMS 服务正在运行”。

等效的 asadmin 命令

jms-ping

Procedure创建 JMS 主机

Application Server Platform Edition 要求只能有一个 JMS 主机,其默认名称为 default_JMS_host。也可以创建其他主机,但 Application Server 无法识别它们。

  1. 在树组件中,展开“配置”节点。

  2. 选择要配置的实例:

    • 要配置特定的实例,请选择该实例的配置节点。例如,对于默认实例 server,请选择 server-config 节点。

    • 要为将来的实例 (使用 default-config 副本)配置默认设置,请选择 default-config 节点。

  3. 展开“Java 消息服务”节点。

  4. 选择“JMS 主机”节点。

  5. 在“JMS 主机”页面中,单击“新建”。将显示“创建 JMS 主机”页面。

  6. 在“名称”字段中,键入主机的名称。例如:


    NewJmsHost
  7. 在“主机”字段中,键入将运行 JMS 主机的系统的名称或 Internet 协议 (Internet Protocol, IP) 地址(localhost 或者本地或远程系统的名称)。

  8. 在“端口”字段中,键入 JMS 服务的端口号。

    仅当使用的 JMS 服务在非默认端口上运行时,才需要更改此字段。(默认端口为 7676。)

  9. 在“管理用户名”和“管理密码”字段中,键入 Message Queue 代理用户名和密码。

    该用户名和密码与 Application Server 的用户名和密码不同。仅当已使用 MQ-install-dir/imq/bin/imqusermgr 命令更改了 Message Queue 代理值时,才需要编辑这些字段。默认值为 adminadmin

  10. 单击“确定”。

等效的 asadmin 命令

create-jms-host

Procedure编辑 JMS 主机

  1. 在树组件中,展开“配置”节点。

  2. 选择要配置的实例:

    • 要配置特定的实例,请选择该实例的配置节点。例如,对于默认实例 server,请选择 server-config 节点。

    • 要为将来的实例 (使用 default-config 副本)配置默认设置,请选择 default-config 节点。

  3. 展开“Java 消息服务”节点。

  4. 选择“JMS 主机”节点。

  5. 在“JMS 主机”页面中,选择要编辑的主机。

  6. 在“编辑 JMS 主机”页面中,可以执行以下任务:

    • 在“主机”字段中,更改主机名或 Internet 协议 (Internet Protocol, IP) 地址。

      • 在“端口”字段中,更改 JMS 服务的端口号。

      • 更改“管理用户名”和“管理密码”字段中的值。

  7. 单击“保存”以保存更改,或者单击“装入默认值”以恢复主机的默认值。

Procedure删除 JMS 主机

  1. 在树组件中,展开“配置”节点。

  2. 选择要配置的实例:

    • 要配置特定的实例,请选择该实例的配置节点。例如,对于默认实例 server,请选择 server-config 节点。

    • 要为将来的实例 (使用 default-config 副本)配置默认设置,请选择 default-config 节点。

  3. 展开“Java 消息服务”节点。

  4. 选择“JMS 主机”节点。

  5. 在“JMS 主机”页面中,选中要删除的主机的名称旁边的复选框。

  6. 单击“删除”。


    注意 – 注意 –

    请勿删除所有 JMS 主机。否则,将使 Application Server 无法重新启动。您必须至少保留一个 JMS 主机。


等效的 asadmin 命令

delete-jms-host