目前Open Message Queue 已经集成到了 GlassFish 中,实现了 Java 消息服务 (Java Message Service, JMS) API。GlassFish也可以与除Open Message Queue之外的JMS提供者(例如 IBM Websphere MQ、Tibco EMS 和 Sonic MQ 等)进行集成。如果对此感兴趣可以查看关于配置GlassFish JMS通用适配器的文章。
下面介绍一下GlassFish中JMS服务集成,摘自(Sun Java System Application Server 9.1 高可用性管理指南)
Java 消息服务集成
MQ 可以通过三种方法与GlassFish集成:LOCAL、REMOTE 和 EMBEDDED
LOCAL Java 消息服务
“类型”属性为 LOCAL(群集实例的默认值)时,Application Server 将启动和停止指定为默认 JMS 主机的 MQ
代理。MQ 进程从 Application Server 进程在单独的 VM 中于进程外启动。Application Server
为代理提供一个额外的端口。此端口将由代理用来启动 RMI 注册表。此端口号将等于该实例的已配置 JMS 端口号加上 100。例如,如果 JMS
端口号是 37676,则此附加端口号将是 37776。
要在 Application Server 实例和 Message Queue 代理之间创建一对一关系,请将类型设置为 LOCAL
并为每个 Application Server 实例提供一个不同的默认 JMS 主机。无论是否已在 Application Server 或
MQ 中定义了群集,都可以进行此操作。
在类型为 LOCAL 的情况下,请使用“启动参数”属性指定 MQ 代理的启动参数。
REMOTE Java 消息服务
“类型”属性为 REMOTE 时,必须单独启动 MQ 代理。有关启动代理的信息,请参见 Sun Java System Message Queue Administration Guide
。
在此情况下,Application Server 将使用从外部配置的代理或代理群集。另外,您必须从 Application Server
单独启动和停止 MQ 代理,并使用 MQ 工具配置和调整代理或代理群集。REMOTE 类型是适用于 Application Server
群集的最佳类型。
在类型为 REMOTE 的情况下,您必须使用 MQ 工具指定 MQ 代理启动参数。忽略“启动参数”属性。
EMBEDDED Java 消息服务
JMS“类型”属性为 EMBEDDED 时,表示应用服务器和 JMS 代理位于同一 VM 中,且 JMS 服务在进程中启动并由 Application Server 管理。在此模式下,JMS 操作绕过网络栈,从而优化了性能。
通过上面的介绍想必大家对OpenMQ与GlassFish的集成方式大概有了些了解,其中REMOTE方式可以让我们的GlassFish使用外部提供的JMS服务,这样就意味着我们可以单独配置具有高可用性和高负载能力的集群来为GlassFish提供JMS服务。
下面开始介绍Open Message Queue的安装与集群配置
Open Message Queue 集群环境
IP
|
HostName |
|
192.168.1.105 |
mq1.localdomain |
|
192.168.1.106 |
mq2.localdomain |
|
下载Open Message Queue
http://download.java.net/mq/open-mq/4.4u2/final/openmq4_4-binary-Linux_X86.zip
安装Open Message Queue
解压文件
[root@mq1 local]# unzip openmq4_4-binary-Linux_X86.zip
进入mq安装目录
[root@mq1 local]# cd MessageQueue4_4
[root@mq1 MessageQueue4_4]#
设置IMQ_DEFAULT_JAVAHOME变量
[root@mq1 MessageQueue4_4]#vim etc/mq/imqenv.conf
增加如下内容:
IMQ_DEFAULT_JAVAHOME=/usr/local/jdk1.6.0_21
启动Open Message Queue
[root@mq1 MessageQueue4_4]# mq/bin/imqbrokerd
[11/二月/2011:13:05:55 CST]
==================================================================
Open Message Queue 4.4
Oracle
版本: 4.4 Update 2 (Build 5-a)
编译: Fri May 14 23:24:45 PDT 2010
Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
==================================================================
Java 运行时: 1.6.0_21 Sun Microsystems Inc. /usr/local/jdk1.6.0_21/jre
[11/二月/2011:13:05:55 CST] IMQ_HOME=/usr/local/MessageQueue4_4/mq
[11/二月/2011:13:05:55 CST] IMQ_VARHOME=/usr/local/MessageQueue4_4/var/mq
[11/二月/2011:13:05:55 CST] Linux 2.6.23.1-42.fc8 i386 mq1.localdomain (1 cpu) root
[11/二月/2011:13:05:55 CST] Java 堆大小:最大为 190080k,当前为 190080k
[11/二月/2011:13:05:55 CST] 参数:
[11/二月/2011:13:05:55 CST] [B1060]: 正在加载持久数据...
[11/二月/2011:13:05:55 CST] 使用内置的基于文件的持久存储库:/usr/local/MessageQueue4_4/var/mq/instances/imqbroker/
[11/二月/2011:13:05:55 CST] [B1039]: 代理 "imqbroker@mq1.localdomain:7676" 就绪。
输出以上信息说明启动成功,Open Message Queue自动创建了一个名为imqbroker
的实例,服务地址为mq1.localdomain:7676,实例的目录为
/usr/local/MessageQueue4_4/var/mq/instances/imqbroker/, 如果想修改默认的实例存放目录可以在
imqenv.conf文件中增加或修改IMQ_DEFAULT_VARHOME变量的值。当然你也可以通过在运行imqbrokerd启动脚本时增加对应的参数来设置你想要的值。
例如:
[root@mq1 MessageQueue4_4]# mq/bin/imqbrokerd -name mybroker -port 7600 -javahome /usr/java -varhome /var/imq
关于imqbrokerd脚本用法请通过imqbrokerd --help查看
Open Message Queue集群启动
首先分别在mq1.localdomain、mq2.localdomain两台主机上安装Open Message Queue,然后通过下面命令启动实例
[root@mq1 MessageQueue4_4]# mq/bin/imqbrokerd -tty -cluster mq1.localdomain:7676,mq2.localdomain:7676 -Dimq.cluster.masterbroker=mq1.localdomain:7676
-cluster参数表示集群中的主机列表,主机之间用","号隔开。
-Dimq.cluster.masterbroker设置系统属性imq.cluster.masterbroker的值,集群中需要设置一个主代理主机,它可以是集群中的一个主机也可以是集群以外的主机。这里我们设置
mq1.localdomain:7676为主代理主机。
mq1.localdomain运行结果
[11/二月/2011:13:48:23 CST]
==================================================================
Open Message Queue 4.4
Oracle
版本: 4.4 Update 2 (Build 5-a)
编译: Fri May 14 23:24:45 PDT 2010
Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
==================================================================
Java 运行时: 1.6.0_21 Sun Microsystems Inc. /usr/local/jdk1.6.0_21/jre
[11/二月/2011:13:48:24 CST] IMQ_HOME=/usr/local/MessageQueue4_4/mq
[11/二月/2011:13:48:24 CST] IMQ_VARHOME=/usr/local/MessageQueue4_4/var/mq
[11/二月/2011:13:48:24 CST] Linux 2.6.23.1-42.fc8 i386 node3.localdomain (1 cpu) root
[11/二月/2011:13:48:24 CST] Java 堆大小:最大为 190080k,当前为 190080k
[11/二月/2011:13:48:24 CST] 参数:-tty -cluster mq1.localdomain:7676,mq2.localdomain:7676 -Dimq.cluster.masterbroker=mq1.localdomain:7676
[11/二月/2011:13:48:24 CST] [B1004]: 使用 tcp [ 7676, 50, * ] 启动 portmapper 服务,最小线程数是 1,最大线程数是 1
[11/二月/2011:13:48:24 CST] [B1060]: 正在加载持久数据...
[11/二月/2011:13:48:24 CST] 使用内置的基于文件的持久存储库:/usr/local/MessageQueue4_4/var/mq/instances/imqbroker/
[11/二月/2011:13:48:24 CST] [B1041]: 群集初始化成功。
[11/二月/2011:13:48:24 CST] [B1136]: 正在处理存储的事务
[11/二月/2011:13:48:24 CST] [B1284]: 0 个群集事务保持 PREPARED 状态,0 个保持 COMMITTED 状态,等待远程代理完成
[11/二月/2011:13:48:24 CST] 在 0 个远程事务中,有 0 个处于 PREPARED 状态,有 0 个处于 COMMITTED 状态
[11/二月/2011:13:48:24 CST] [B1013]: 已启用队列的自动创建
[11/二月/2011:13:48:24 CST] [B1151]: 正在加载目的地 mq.sys.dmq [队列] 以及 0 条消息
[11/二月/2011:13:48:24 CST] [B1152]: 目的地 mq.sys.dmq [队列] 加载完成
[11/二月/2011:13:48:24 CST] [B1239]: 使用平台 MBean 服务器
[11/二月/2011:13:48:24 CST] JESMF 类不存在 - 将不会启用 JESMF 支持。
[11/二月/2011:13:48:24 CST] 已使用 URL service:jmx:rmi://mq1.localdomain/stub/rO0ABXNyAC5qYXZheC5tYW5hZ2VtZW50LnJlbW90ZS5ybWkuUk1JU2VydmVySW1wbF9TdHViAAAAAAAAAAICAAB4cgAaamF2YS5ybWkuc2VydmVyLlJlbW90ZVN0dWLp/tzJi+FlGgIAAHhyABxqYXZhLnJtaS5zZXJ2ZXIuUmVtb3RlT2JqZWN002G0kQxhMx4DAAB4cHc5AAtVbmljYXN0UmVmMgAADjE5Mi4xNjguMTEuMjAzAACN/V6+F1Fn42c4Fiu1QwAAAS4TQ1p0gAEAeA== 成功启动了 JMX 连接器服务器 jmxrmi
[11/二月/2011:13:48:24 CST] [B1004]: 使用 tcp(host = *, port=0, mode=dedicated) 启动 admin 服务,最小线程数是 4,最大线程数是 10
[11/二月/2011:13:48:24 CST] [B1227]: 使用 file 用户系统信息库进行 admin 服务连接验证
[11/二月/2011:13:48:24 CST] [B1004]: 使用 tcp(host = *, port=0, mode=dedicated) 启动 jms 服务,最小线程数是 10,最大线程数是 1000
[11/二月/2011:13:48:24 CST] [B1227]: 使用 file 用户系统信息库进行 jms 服务连接验证
[11/二月/2011:13:48:24 CST] [B1069]: 作为群集的主代理运行。
[11/二月/2011:13:48:24 CST] [B1075]: 从主代理接收到持久状态更改记录。接受客户连接已准备就绪。
[11/二月/2011:13:48:24 CST] [B1004]: 使用 tcp [ 0.0.0.0/0.0.0.0:54334 ] 启动 cluster 服务,最小线程数是 1,最大线程数是 1
[11/二月/2011:13:48:24 CST] [B1228]: 群集 Ping 间隔为 60 秒
[11/二月/2011:13:48:24 CST] [B1039]: 代理 "imqbroker@mq1.localdomain:7676" 就绪。
mq2.localdomain运行结果
[11/二月/2011:13:55:03 CST]
==================================================================
Open Message Queue 4.4
Sun Microsystems, Inc.
版本: 4.4 (Build 16-a)
编译: Thu Aug 27 07:43:07 PDT 2009
Copyright (c) 2009 Sun Microsystems, Inc. All rights reserved. Use is
subject to license terms.
==================================================================
Java 运行时: 1.6.0_21 Sun Microsystems Inc. /usr/local/jdk1.6.0_21/jre
[11/二月/2011:13:55:03 CST] IMQ_HOME=/usr/local/MessageQueue4_4/mq
[11/二月/2011:13:55:03 CST] IMQ_VARHOME=/usr/local/MessageQueue4_4/var/mq
[11/二月/2011:13:55:03 CST] Linux 2.6.23.1-42.fc8 i386 node1.localdomain (1 cpu) root
[11/二月/2011:13:55:03 CST] Java 堆大小:最大为 190080k,当前为 190080k
[11/二月/2011:13:55:03 CST] 参数:-tty -cluster mq1.localdomain:7676,mq2.localdomain:7676 -Dimq.cluster.masterbroker=mq1.localdomain:7676
[11/二月/2011:13:55:03 CST] [B1004]: 使用 tcp [ 7676, 50, * ] 启动 portmapper 服务,最小线程数是 1,最大线程数是 1
[11/二月/2011:13:55:03 CST] [B1060]: 正在加载持久数据...
[11/二月/2011:13:55:03 CST] 使用内置的基于文件的持久存储库:/usr/local/MessageQueue4_4/var/mq/instances/imqbroker/
[11/二月/2011:13:55:03 CST] [B1041]: 群集初始化成功。
[11/二月/2011:13:55:03 CST] [B1004]: 使用 tcp [ 0, 100 ] 启动 cluster_discovery 服务,最小线程数是 1,最大线程数是 1
[11/二月/2011:13:55:03 CST] [B1136]: 正在处理存储的事务
[11/二月/2011:13:55:03 CST] [B1284]: 0 个群集事务保持 PREPARED 状态,0 个保持 COMMITTED 状态,等待远程代理完成
[11/二月/2011:13:55:03 CST] 在 0 个远程事务中,有 0 个处于 PREPARED 状态,有 0 个处于 COMMITTED 状态
[11/二月/2011:13:55:03 CST] [B1013]: 已经启用队列的自动创建
[11/二月/2011:13:55:03 CST] [B1151]: 正在加载目的地 mq.sys.dmq [队列] 以及 0 条消息
[11/二月/2011:13:55:03 CST] [B1152]: 目的地 mq.sys.dmq [队列] 加载完成
[11/二月/2011:13:55:04 CST] [B1239]: 使用平台 MBean 服务器
[11/二月/2011:13:55:04 CST] JESMF classes not present - JESMF support will not be enabled.
[11/二月/2011:13:55:04 CST] 已使用 URL service:jmx:rmi://mq2.localdomain/stub/rO0ABXNyAC5qYXZheC5tYW5hZ2VtZW50LnJlbW90ZS5ybWkuUk1JU2VydmVySW1wbF9TdHViAAAAAAAAAAICAAB4cgAaamF2YS5ybWkuc2VydmVyLlJlbW90ZVN0dWLp/tzJi+FlGgIAAHhyABxqYXZhLnJtaS5zZXJ2ZXIuUmVtb3RlT2JqZWN002G0kQxhMx4DAAB4cHc5AAtVbmljYXN0UmVmMgAADjE5Mi4xNjguMTEuMjAwAAC6wccVdbj1QC5WY9SseAAAAS4TSXLXgAEAeA== 成功启动了 JMX 连接器服务器 jmxrmi
[11/二月/2011:13:55:04 CST] [B1004]: 使用 tcp(host = *, port=0, mode=dedicated) 启动 admin 服务,最小线程数是 4,最大线程数是 10
[11/二月/2011:13:55:04 CST] [B1227]: 使用 file 用户系统信息库进行 admin 服务连接验证
[11/二月/2011:13:55:04 CST] [B1004]: 使用 tcp(host = *, port=0, mode=dedicated) 启动 jms 服务,最小线程数是 10,最大线程数是 1000
[11/二月/2011:13:55:04 CST] [B1227]: 使用 file 用户系统信息库进行 jms 服务连接验证
[11/二月/2011:13:55:04 CST] 错误 [B1073]: 暂停所有服务,直到建立了和主代理的通讯为止。服务会自动恢复。
[11/二月/2011:13:55:04 CST] [B1004]: 使用 tcp [ 0.0.0.0/0.0.0.0:56536 ] 启动 cluster 服务,最小线程数是 1,最大线程数是 1
[11/二月/2011:13:55:04 CST] [B1228]: 群集 Ping 间隔为 60 秒
[11/二月/2011:13:55:04 CST] [B1039]: 代理 "imqbroker@mq2.localdomain:7676" 就绪。
[11/二月/2011:13:55:04 CST] [B1179]: 激活的代理
Address = mq://192.168.1.105:7676/?instName=imqbroker&brokerSessionUID=3167207098217489408
StartTime = 1297403304443
ProtocolVersion = 410
[11/二月/2011:13:55:04 CST] [B1071]: 已经建立群集连接:mq://192.168.1.105:7676/?instName=imqbroker&brokerSessionUID=3167207098217489408[mq1.localdomain/192.168.1.105:54334]
[11/二月/2011:13:55:04 CST] [B1075]: 从主代理接收到持久状态更改记录。接受客户连接已准备就绪。
mq2.localdomain启动完毕后会在mq1.localdomain上提示如下信息:
[11/二月/2011:13:50:15 CST] [B1179]: 激活的代理
Address = mq://192.168.1.106:7676/?instName=imqbroker&brokerSessionUID=1388848195388534784
StartTime = 1297403417578
ProtocolVersion = 410
[11/二月/2011:13:50:15 CST] [B1071]: 已建立与代理
mq://192.168.1.106:7676/?instName=imqbroker&brokerSessionUID=1388848195388534784[/192.168.1.106:43217]
的群集连接
我们可以imqcmd命令连接到任意一台主机上执行来查看集群状态
[root@mq1 MessageQueue4_4]# mq/bin/imqcmd list bkr -b mq1.localdomain:7676
用户名: admin
密码: admin
列出以下代理所属的群集中的所有代理:
-----------------
主机 主端口
-----------------
localhost 7676
群集 ID
群集具有高可用性 false
-------------------------------
地址 状态
-------------------------------
192.168.1.105:7676 OPERATING
192.168.1.106:7676 OPERATING
已成功列出群集中的代理。
有关imqcmd脚本用法请使用imqcmd -h查看
至此Open Message Queue 4.4的集群搭建已经完成。
分享到:
相关推荐
这些依赖关系详细记录在《Sun Java System Message Queue 4.3 发布说明》中的“组件依赖性”部分,请在安装 OpenMQ 4.3 之前检查这些软件依赖项。 #### 硬件需求 为了安装 OpenMQ 4.3,您的系统应满足以下各节规定...
本文将详细介绍OpenMQ的基本管理命令,包括安装、集群配置、管理命令以及查看和操作队列与主题。 首先,让我们从安装开始。在Linux系统上安装OpenMQ时,通常需要下载安装文件,如`openmq4_3-installer-Unix.zip`,...
OpenMQ,全称为Java Message Service (JMS) 提供商,是Oracle公司的一款开源消息中间件,用于在分布式系统中传递消息。OpenMQ 4.4.2是该软件的一个特定版本,它提供了稳定且高性能的消息传递服务。在这个版本中,...
标题中的"habari-openmq-20190131-src.zip"表明这是一个源代码压缩包,发布日期为2019年1月31日,名为“habari”的项目,它与OpenMQ相关。OpenMQ是Oracle的开源消息中间件,用于处理应用程序之间的消息传递,提供...
在实际应用中,OpenMQ还可能与其他系统集成,如应用服务器、数据库等,这时可能需要额外的依赖包。同时,开发者也需要关注OpenMQ的配置,如设置消息存储、安全性、性能优化等,这些都是基于这些基础依赖包之上实现的...
habari-openmq-6.1-installer.exe
在`openmq-master`这个压缩包文件中,可能包含了OpenMQ的源代码、构建脚本、文档和其他资源。你可以通过查阅这些文件来深入了解OpenMQ的内部工作原理,学习如何配置和部署OpenMQ服务器,以及如何编写使用JMS的Java...
glassfish食谱将安装和配置GlassFish应用程序服务器以及与GlassFish应用程序服务器捆绑在一起的OpenMQ消息代理。 该菜谱还定义了用于创建和配置GlassFish应用程序域和OpenMQ代理实例的资源。 项目中提供了一个带有...
然而,Sun的OpenMQ作为一种同样强大的消息中间件解决方案,在特定场景下也有着广泛的应用。OpenMQ是Sun Java System Message Queue的一个开源版本,拥有企业级、可扩展性以及成熟稳定的特点。它提供了一套完整的JMS...
这些系统在企业级应用中扮演着重要的角色,用于解耦服务、提高系统的可扩展性以及保证消息的可靠传输。 #### 支持的协议对比 | MQ系统 | 支持的协议 | |----------|-------------------------------------| | ...
- OpenMQ:对于非Java应用,可以通过Open Message Client (OMC) 进行集成。 - SDK支持:还有Python、Go、.NET等多种语言的SDK可供选择。 6. **管理工具**: - RocketMQ提供的管理工具可以帮助监控、管理和调试...
为 OpenMQ (GlassFish JMS) / Oracle WebLogic MQ 开发基于队列消息管理 gui 的工具。 工具名称为 QBrowserV2。 它旨在实现新消息创建/发送、删除消息、转发消息、订阅主题等功能。
在传送过程中,系统处理JMS消息分为以下两类: ■ 有效负荷消息,由生成方发送给使用方的消息。 ■ 控制消息,代理与客户端运行时环境之间传送的私有消息,用于确保有效负荷消息成功传送和控制跨连接的消息流。 ...
ActiveMQ是Apache软件基金会开发的一款开源消息中间件,它是基于Java的,并且遵循开放消息传递协议(Open Message Broker Protocol,简称OpenMQ),广泛应用于分布式系统中的异步通信和解耦。ActiveMQ作为消息代理,...
- **ZeroMQ**不支持负载均衡,这可能会限制其在高负载环境中的应用。 **12. 管理界面** - **RabbitMQ**提供了较好的管理界面,这对于监控和管理MQ系统的运行状态非常有帮助。 - 其他MQ产品如**ActiveMQ**和**...
**MQ**,即**Message Queue**(消息队列),是一种在分布式系统中实现进程间通信的技术。消息队列本质上是一个先进先出(FIFO)的数据结构,用于存储消息直到被消费。这种技术允许不同组件之间解耦,提高系统的灵活...
4. **轻量级框架**:RocketMQ的客户端库小巧,易于集成到各种应用中,同时提供了丰富的API,开发者可以快速上手并实现复杂的消息处理逻辑。 5. **灵活性**:RocketMQ支持多种部署模式,如集群模式、广播模式等,...
消息队列是一种应用系统之间进行异步通信的中间件,它的核心功能是实现不同应用之间的信息传递,它在软件工程中常用于解耦服务、提高系统伸缩性以及保证消息传递的可靠性和顺序性。在当今分布式系统架构中,消息队列...
ActiveMQ是Apache软件基金会开发的一款开源消息中间件,它遵循开放消息中间件协议(Open Message Broker API,简称OpenMQ API),提供高性能、可伸缩、可靠的消息传递服务。API文档是开发者理解和使用ActiveMQ的关键...
这使得用Rust编写的程序可以与消息队列服务进行交互,例如ActiveMQ,RabbitMQ,HornetQ和OpenMQ。 连接订阅发送确认(自动/客户端/客户端个人)交易收据断开心跳信号踩踏程序的API尚不稳定,并且可能在v1.0之前波动...