`

OpenMQ集群在GlassFish中的应用---安装篇

阅读更多

      目前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的集群搭建已经完成。

2
0
分享到:
评论

相关推荐

    habari-openmq-20190131-src.zip

    habari-openmq-20190131-src.zip

    habari-openmq-6.1-installer.exe

    habari-openmq-6.1-installer.exe

    openMq基本命令使用

    OpenMq 基本管理命令,安装、集群、管理命令、查看队列、链接等相关服务

    OpenMQ_install_FCS

    sun公司OpenMq的安装指南,比较详细,可以惨嚎

    openmq-4.4.2

    openmq 4.4.2源码

    openmq 编译依赖包

    openmq 编译依赖包

    chef-glassfish:管理GlassFish的食谱

    glassfish食谱将安装和配置GlassFish应用程序服务器以及与GlassFish应用程序服务器捆绑在一起的OpenMQ消息代理。 该菜谱还定义了用于创建和配置GlassFish应用程序域和OpenMQ代理实例的资源。 项目中提供了一个带有...

    openmq:OpenMQ

    OpenMQ项目JMS SI(规范实施) 该项目包含以下模块:更多详细信息可在下一个文件夹中找到,

    QBrowser for GlassFish JMS / WebLogic MQ-开源

    为 OpenMQ (GlassFish JMS) / Oracle WebLogic MQ 开发基于队列消息管理 gui 的工具。 工具名称为 QBrowserV2。 它旨在实现新消息创建/发送、删除消息、转发消息、订阅主题等功能。

    大型系统中使用JMS优化技巧–Sun OpenMQ

    在传送过程中,系统处理JMS消息分为以下两类: ■ 有效负荷消息,由生成方发送给使用方的消息。 ■ 控制消息,代理与客户端运行时环境之间传送的私有消息,用于确保有效负荷消息成功传送和控制跨连接的消息流。 ...

    将Sun的Open Message Queue与Spring集成

    基于JMS标准的消息中间件实现的产品有很多,JBossMQ、ActiveMQ、OpenMQ、OpenJMS等等,最常用的还是apache的ActiveMQ。有时也使用Sun的OpenMQ。在官网http://mq.java.net/处可以下载。Open Message Queue是Sun Java ...

    stomp-rs为Rust编程语言提供了完整的STOMP 1.2客户端实现。-Rust开发

    这使得用Rust编写的程序可以与消息队列服务进行交互,例如ActiveMQ,RabbitMQ,HornetQ和OpenMQ。 连接订阅发送确认(自动/客户端/客户端个人)交易收据断开心跳信号踩踏程序的API尚不稳定,并且可能在v1.0之前波动...

    OOP_ISS_2term_tasks

    使用SOAP协议,创建一个Web服务,该服务使用RSA协议对给定消息进行加密(首先在数据库中找到接收者的公共密钥),然后将其发送给接收者的适当地址,而发送消息的客户端可以发送回复。 使用Web浏览器作为客户端应用...

    java8集合源码分析-notes:读书笔记

    OpenMQ Open-MQ 是一个开源的消息中间件,类似IBM的 WebSphere MQ(MQSeries),采用 C++ 和 Qt 库编写的,支持Windows、Unix 以及 Mac OS 平台,支持 JMS。 ZeroMQ ZeroMQ(简称ZMQ)是一个基于消

    十种MQ的技术选型详细对比.docx

    ActiveMQ、RabbitMQ、RocketMq、Joram、HornetQ、OpenMQ、MuleMQ、SonicMQ、ZeroMQ、Kafka 从关注度,成熟度,社区活跃度、文档、特点、授权方式、语言、事务、集群、持久化、协议,部署方式、UI、评价等诸多维度

    各种消息队列对比

    消息队列中间件调研文档。ActiveMQ、RabbitMQ、RocketMq、Joram、HornetQ、OpenMQ等的对比。

Global site tag (gtag.js) - Google Analytics