本章介绍了如何为使用 Java 消息服务 (Java Message Service, 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。
Java 消息服务 (Java Message Service, JMS) API 使用两种被管理对象:
连接工厂,允许应用程序以编程方式创建其他 JMS 对象的对象。
目标,充当消息的系统信息库
这些对象是以管理方式创建的,创建对象的方式特定于每个 JMS 实现。在 Application Server 中,执行以下任务:
应用程序使用来访问连接工厂和目标资源。通常,JMS 应用程序至少使用一个连接工厂和一个目标。要了解所需创建的资源,请仔细研究应用程序或向应用程序开发者进行咨询。
连接工厂分为三种类型:
QueueConnectionFactory 对象,用于点对点通信
TopicConnectionFactory 对象,用于发布-订阅通信
ConnectionFactory 对象,可用于点对点通信和发布-订阅通信;建议将这些对象用于新的应用程序
目标有两种类型:
Queue 对象,用于点对点通信
Topic 对象,用于发布-订阅通信
《The J2EE 1.4 Tutorial》中有关 JMS 的章节提供了这两种通信和 JMS 其他方面的详细信息(请参见 http://java.sun.com/j2ee/1.4/docs/tutorial/doc/index.html)。
创建资源的顺序并不重要。
对于 J2EE 应用程序,请在 Application Server 部署描述符中指定连接工厂和目标资源,如下所示:
在 resource-ref 或 mdb-connection-factory 元素中指定连接工厂 JNDI 名称。
在消息驱动的 Bean 的 ejb 元素和 message-destination 元素中指定目标资源 JNDI 名称。
在 message-destination-link 元素中指定物理目标名称,该元素在企业 Bean 部署描述符的 message-driven 元素或 message-destination-ref 元素内。此外,还应在 message-destination 元素中指定该物理目标名称。(message-destination-ref 元素替换了在新的应用程序中过时的 resource-env-ref 元素。)在 Application Server 部署描述符的 message-destination 元素中,将物理目标名称与目标资源名称链接起来。
Application Server 通过使用名为 jmsra 的系统资源适配器实现 JMS。用户创建 JMS 资源时,Application Server 会自动创建连接器资源,这些资源将显示在管理控制台树视图的“连接器”节点下。
对于用户创建的每个 JMS 连接工厂,Application Server 都将为其创建连接器连接池和连接器资源。对于用户创建的每个 JMS 目标,Application Server 都将为其创建管理对象资源。用户删除 JMS 资源时,Application Server 将自动删除连接器资源。
可以通过使用管理控制台的“连接器”节点(而不是“JMS 资源”节点)来为 JMS 系统资源适配器创建连接器资源。有关详细信息,请参见第 7 章,连接器资源。
在树组件中,展开“资源”节点,然后展开“JMS 资源”节点。
选择“连接工厂”节点。
在“JMS 连接工厂”页面中,单击“新建”。
将出现“创建 JMS 连接工厂”页面。
在“JNDI 名称”字段中,键入连接工厂的名称。
建议使用 JMS 资源的命名子上下文前缀 jms/。例如:jms/ConnectionFactory1。
从“类型”下拉式列表中,选择 javax.jms.ConnectionFactory、javax.jms.QueueConnectionFactory 或 javax.jms.TopicConnectionFactory。
选中“已启用”复选框以在运行时启用该资源。
在“高级”区域中,更改连接工厂属性所需的值。
有关这些属性的详细信息,请参见编辑 JMS 连接工厂资源。Application Server 会将这些属性应用到为连接工厂创建的连接器连接池。
对于 JMS 连接工厂资源,请按照如下所示指定事务支持的值:
对于可用于事务的资源,指定 XATransaction(默认值),这些事务使用事务范围内多个资源。
例如,此资源和 JDBC 资源、连接器资源或其他 JMS 连接工厂资源。此值提供最大的灵活性。配置为 XATransaction 的资源将参与分为两个阶段的提交操作。
对于事务(仅使用事务范围内的唯一一种资源)可以使用的资源或在使用多个 XA 资源的分布式事务中用作最后一个代理的资源,指定 LocalTransaction。
此值提供更好的性能。配置为 LocalTransaction 的资源将不被用于分为两个阶段的提交操作。
对于永远无法参与事务的资源,指定 NoTransaction。
JMS 应用程序中限用此设置。
在“其他属性”区域中,为应用程序所需的属性提供值。下表列出了可用的属性。
属性名称 |
说明 |
---|---|
为长期订户将要使用的连接工厂指定客户机 ID。 |
|
指定应用程序将与其进行通信的消息代理实例的名称(和端口号 [可选] )。列表中的每个地址都指定了要连接的主机名(和端口号和连接服务 [可选])。例如,该值可能为 earth 或 earth:7677。当消息代理在默认端口 (7676) 以外的端口上运行时,请指定端口号。如果属性设置指定了群集环境中的多个主机和端口,则将使用该列表中的第一个可用主机(除非将 AddressListBehavior 属性设置为 RANDOM)。 有关详细信息,请参见 Message Queue Developer’s Guide for Java Clients。 默认值:本地主机和默认端口号 (7676)。客户机将尝试连接至位于本地主机端口 7676 上的代理。 |
|
与 AddressList 相同。此属性名已过时。请使用 AddressList 代替。 |
|
进入连接工厂的用户名。 默认值:guest |
|
进入连接工厂的密码。 默认值:guest |
|
如果启用该属性(值 = true),则指定客户机运行时在丢失连接时尝试重新连接至消息服务器(或 AddressList 中的地址列表)。 默认值:TRUE |
|
指定客户机运行时在尝试连接 AddressList 列表中的下一个地址之前尝试连接(或重新连接)列表中每个地址的次数。值 -1 表示重新连接尝试次数没有限制(客户机运行时将尝试连接至第一个地址,直到连接成功)。 默认值:3 |
|
指定重新连接尝试之间的时间间隔(毫秒)。此属性适用于对 AddressList 中每个地址的尝试,及对该列表中连续地址的尝试。如果该时间间隔太短,则代理将没有时间恢复。如果该时间间隔太长,则重新连接可能会指明这是不可接受的延迟。 默认值:30000 |
|
指定是按 AddressList 属性中的地址顺序 (PRIORITY) 还是按随机顺序 (RANDOM) 进行连接尝试。 RANDOM 表示重新连接将从 AddressList 中随机选择一个地址。如果许多客户机尝试使用同一个连接工厂来进行连接,则该值将阻止它们全部连接至同一个地址。 PRIORITY 表示重新连接始终尝试连接 AddressList 中的第一个服务器地址,并且仅在第一个代理不可用时才使用其他地址。 默认值:RANDOM |
|
指定客户机运行时建立(或重新建立)连接时,在 AddressList 中重复的次数。值 -1 表示尝试次数没有限制。 默认值:3 |
在“目标”区域中,执行以下操作:
单击“确定”以保存连接工厂。
create-jms-resource
在树组件中,展开“资源”节点,然后展开“JMS 资源”节点。
展开“连接工厂”节点。
选择要编辑的连接工厂。
在“编辑 JMS 连接工厂”页面中,可以执行以下任务:
修改“说明”字段中的文本。
选中或取消选中“已启用”复选框以启用或禁用资源。
更改“高级”区域中的属性值。
添加、删除或修改属性。
或者,单击“目标”选项卡以转至“JMS 连接工厂资源目标”页面。在此页面中,执行以下操作:
单击“保存”以保存更改。
delete-jms-resource
在树组件中,展开“资源”节点,然后展开“JMS 资源”节点。
选择“目标资源”节点。
在“JMS 目标资源”页面中,单击“新建”。将出现“创建 JMS 目标资源”页面。
在“JNDI 名称”字段中,键入资源的名称。
建议的做法是对 JMS 资源使用命名子上下文前缀 jms/ 。例如:jms/Queue。
从“类型”下拉式列表中,选择 javax.jms.Topic 或 javax.jms.Queue。
选中“已启用”复选框以在运行时启用该资源。
在“其他属性”区域中,为各个属性提供值。
下表列出了可用的属性。
属性名称 |
说明 |
---|---|
(必需)资源引用的物理目标的名称。 |
|
物理目标的说明。 |
在“目标”区域中,执行以下操作:
单击“确定”。
create-jms-resource
在树组件中,展开“资源”节点,然后展开“JMS 资源”节点。
展开“目标资源”节点。
选择要编辑的目标资源。
在“编辑 JMS 目标资源”页面中,可以执行以下任务:
单击“保存”以保存更改。
或者,单击“目标”选项卡转至“JMS 目标资源目标”页面。在此页面中,执行以下操作:
delete-jms-resource
要进行生产,务必创建物理目标。但是,在开发和测试阶段,不需要执行此步骤。应用程序首次访问目标资源时,Message Queue 会自动创建目标资源的 Name 属性指定的物理目标。该物理目标是临时的,并且将在 Message Queue 配置属性指定的时间段后过期。
在树组件中,展开“配置”节点,然后展开“Java 消息服务”节点。
选择要配置的实例:
选择“物理目标”节点。
在“物理目标”页面中,单击“新建”。
将出现“创建物理目标”页面。
在“物理目标名称”字段中,键入目标的名称(例如,PhysicalQueue)。
从“类型”下拉式列表中,选择 topic 或 queue。
在“其他属性”区域中,单击“添加属性”以添加属性。
下表列出了当前可用的一个属性。
属性名称 |
说明 |
---|---|
可以在从队列目标的负载平衡传送中处于活动状态的使用者的最大数目。如果值为 - 1,则表示没有数目限制。如果目标是为独立服务器实例创建的,则默认值为 1;如果目标是为群集创建的,则默认值为 -1。 |
要修改此属性的值或指定其他物理目标属性,请使用 MQ-install-dir/imq/bin/imqcmd 命令。有关更多信息,请参见 Message Queue Administration Guide。
单击“确定”。
create-jmsdest
“物理目标”页面显示系统目标,即过期和无法传送的消息被重定向到的队列 mq.sys.dmq。可以为此目标创建目标资源、使用者和浏览器,但不能删除或向其发送消息。
在树组件中,展开“配置”节点,然后展开“Java 消息服务”节点。
选择要配置的实例:
选择“物理目标”节点。
在“物理目标”页面中,选中要删除的目标的名称旁边的复选框。
单击“删除”。
如果尝试删除系统目标 mq.sys.dmq,将显示错误消息。
delete-jmsdest
使用“JMS 服务”页面配置所有 JMS 连接都使用的属性。
有关配置 JMS 服务的更多信息,请参见 Application Server Developer’s Guide。
在树组件中,选择“配置”节点。
选择要配置的实例:
选择“Java 消息服务”节点以打开“JMS 服务”页面。
要更改 Application Server 在异常中止启动之前等待 JMS 服务启动的时间,请编辑“启动超时”字段中的值。
在运行缓慢或过载的系统中,在默认超时值 (60) 的基础上增大该值。
从“类型”下拉式列表中:
选择 LOCAL(server-config 配置的默认设置)以访问本地主机上的 JMS 服务。JMS 服务由 Application Server 启动和管理。
选择 REMOTE(default-config 配置的默认设置 )以访问其他系统或群集上的 JMS 服务。如果选择了 REMOTE,则下一次启动服务器时 JMS 服务不会由 Application Server 启动。而是通过 来启动和管理服务,因而必须单独启动代理。有关启动代理的信息,请参见 Message Queue Administration Guide。如果选择此值并使用了远程主机,请按照编辑 JMS 主机中的说明来指定远程主机的名称。
在“启动变量”字段中,键入变量以自定义 JMS 服务启动。
通过 MQ-install-dir/imq/bin/imqbrokerd 命令使用任意可用的变量。
使用“重新连接”复选框指定连接丢失时,JMS 服务是否尝试重新连接至消息服务器(或 AddressList 中的地址列表)。
默认情况下,启用重新连接。
在“重新连接时间间隔”字段中,键入重新连接尝试之间的秒数。
此设置适用于对 AddressList 中每个地址的尝试,及对该列表中连续地址的尝试。如果该时间间隔太短,则代理将没有时间恢复。如果该时间间隔太长,则重新连接可能会指明这是不可接受的延迟。
默认值为 60 秒。
在“重新连接尝试”字段中,键入指定客户机运行时尝试连接(或重新连接)AddressList 列表中每个地址的次数。到达这个值后,客户机运行时将尝试连接列表中的下一个地址。
值 -1 表示重新连接尝试次数没有限制(客户机运行时将尝试连接至第一个地址,直到连接成功)。默认值为 3。
从“默认 JMS 主机”下拉式列表中选择一个主机。默认值为 default_JMS_host。
在“地址列表行为”下拉式列表中,选择是按 AddressList 中的地址顺序 (priority) 还是按随机顺序 (random) 来尝试连接。
priority 表示重新连接始终尝试连接 AddressList 中的第一个服务器地址,并且仅在第一个代理不可用时才使用其他地址。
如果许多客户机同时尝试使用同一个连接工厂来进行连接,则应指定 random 以防止它们全部连接至同一个地址。
默认值为 random。
在“地址列表重复”字段中,键入 JMS 服务建立(或重新建立)连接时,在 AddressList 中迭代的次数。
值 -1 表示尝试次数没有限制。
默认值为 3。
在“MQ 模式”和“MQ 服务”字段中,输入 Message Queue 地址模式名称和 Message Queue 连接服务名称(如果要使用非默认模式或服务)。
消息服务地址的完整语法为
scheme://address-syntax |
其中,scheme 和 address-syntax 将在下表中进行介绍。
MQ 模式和 MQ 服务是下表的前两列中显示的值。
模式名称 |
连接服务 |
说明 |
地址语法 |
---|---|---|---|
mq |
jms 和 ssljms |
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 |
在“其他属性”区域中,单击“添加属性”以添加属性。
下表列出了可用的 Sun Java System Message Queue 代理配置属性。
属性名称 |
说明 |
---|---|
指定完整的 Message Queue 代理实例名。默认值为 imqbroker。 |
|
指定要添加到完整的 Message Queue 代理实例名中的后缀。该后缀与实例名之间以下划线字符 (_) 分隔。例如,如果实例名为 imqbroker,则在附加后缀 xyz 之后,实例名将更改为 imqbroker_xyz。 |
|
如果为 true,则应在完整的 Message Queue 代理实例名后附加主要和次要版本号,这两个版本号之前都有一个下划线字符 (_)。例如,如果实例名为 imqbroker,则在附加版本号之后,实例名将更改为 imqbroker_8_0。默认值为 false。 |
单击“保存”以保存更改,或者单击“装入默认值”以恢复服务的默认值。
将提供者和主机更改到远程系统将使所有 JMS 应用程序在远程服务器上运行。要同时使用本地服务器和一个或多个远程服务器,请使用 AddressList 属性创建连接工厂资源,从而创建访问远程服务器的连接。请参见创建 JMS 连接工厂资源。
在树组件中,选择“配置”节点。
选择要配置的实例:
选择“Java 消息服务”节点以打开“JMS 服务”页面。
单击 "Ping"。
如果 JMS 服务已启动并且正在运行,则将显示消息“Ping 成功:JMS 服务正在运行”。
jms-ping
Application Server Platform Edition 要求只能有一个 JMS 主机,其默认名称为 default_JMS_host。也可以创建其他主机,但 Application Server 无法识别它们。
在树组件中,展开“配置”节点。
选择要配置的实例:
展开“Java 消息服务”节点。
选择“JMS 主机”节点。
在“JMS 主机”页面中,单击“新建”。将显示“创建 JMS 主机”页面。
在“名称”字段中,键入主机的名称。例如:
NewJmsHost |
在“主机”字段中,键入将运行 JMS 主机的系统的名称或 Internet 协议 (Internet Protocol, IP) 地址(localhost 或者本地或远程系统的名称)。
在“端口”字段中,键入 JMS 服务的端口号。
仅当使用的 JMS 服务在非默认端口上运行时,才需要更改此字段。(默认端口为 7676。)
在“管理用户名”和“管理密码”字段中,键入 Message Queue 代理用户名和密码。
该用户名和密码与 Application Server 的用户名和密码不同。仅当已使用 MQ-install-dir/imq/bin/imqusermgr 命令更改了 Message Queue 代理值时,才需要编辑这些字段。默认值为 admin 和 admin。
单击“确定”。
create-jms-host
在树组件中,展开“配置”节点。
选择要配置的实例:
展开“Java 消息服务”节点。
选择“JMS 主机”节点。
在“JMS 主机”页面中,选择要编辑的主机。
在“编辑 JMS 主机”页面中,可以执行以下任务:
单击“保存”以保存更改,或者单击“装入默认值”以恢复主机的默认值。
在树组件中,展开“配置”节点。
选择要配置的实例:
展开“Java 消息服务”节点。
选择“JMS 主机”节点。
在“JMS 主机”页面中,选中要删除的主机的名称旁边的复选框。
单击“删除”。
请勿删除所有 JMS 主机。否则,将使 Application Server 无法重新启动。您必须至少保留一个 JMS 主机。
delete-jms-host