eMobile MQ安装使用说明


eMobile MQ 安装使用说明 (V1.1)

北京神州数码思特奇信息技术股份有限公司 二零零九年三月

文档信息
文档名称 电子文档 文件状态 编 写 人 校 对 人 审 核 人 批 准 人
eMobile MQ 安装使用说明 eMobile MQ 安装使用说明.doc/Microsoft WORD 2003 ■ 草 稿 □ 正式发布 □ 正在修改 年 年 年 年 月 月 月 月 日 日 日 日

日 日 日 日

期 期 期 期

变更记录
变更 变更原因 序号 01 02 创建 完善 V1.1 敦泽 页码 版本号 版本号 变更 变更前 变更后 更改人 批准人 日期 注 生效 备

1.软件介绍
1.1 spread 介绍
spread 是高性能的分布式分组消息系统,支持局域网以及广域网通讯。spread 可以作为一个分 布式应用的消息总线,并且具有高度的灵活性,可以做到多播,分组,以及点对点的消息传递。

1.2 spread 的优点:
支 持 跨 平 台 的 操 作 : Unix(BSD , Linux , Solaris , Irix , AIX , Mac OS X , etc) 和 Windows(2000/NT/98/95); API 接口简单,支持多种编程语言,包括 C/C++,C#,Java,Perl,Python 和 Ruby; 消息处理做了优化,在局域网中可以支撑每秒 8000 个 1Kbytes 的消息; 支持单播,多播,多组多播;

1.软件安装
1.1 支持的操作系统

1.1 需要的软件包
Spread 安装包 下载路径 http://www.spread.org/download.html Make-3.81 安装包 下载路径 http://ftp.gnu.org/gnu/make/ Linux 下只需要 spread 包 Hp 和 ibm 机器需要 spread 和 make-3.81 包

1.1.1 安装步骤
Linux 执行以下命令安装 spread。 cd /home/spread tar -zxvf spread-src-4.0.0.tar.gz

cd spread-src-4.0.0 ./configure –prefix=/home/spread/spread #程序安装路径 make make install hp 和 ibm 机器安装 将安装包 make-3.81.tar.gz 和 spread-src-4.0.0.tar.gz 包(或者更高版本的安装包)传到服务器 上。 首先需要安装 make-3.81,解包 建立安装消息中间件的目录,例如 mkdir pkg 进入到 make-3.81 执行一下命令 ./configure –-prefix=$HOME/pkg/make Make Make install 然后解压 spread-src-4.0.0.tar.gz 进入到 spread-src-4.0.0 目录 ./configure –-prefix=$HOME/pkg/spread $HOME/pkg/make/bin/make $HOME/pkg/make/bin/make install 此时在 make 和 make install 会出现错误 查看$HOME/pkg/spread 都有哪些目录,正常应有以下目录; bin etc include lib sbin 如果没有,从 spread-src-4.0.0 目录拷贝过来;这样安装完成。

1.1.2 测试安装
在安装目录下执行./sbin/spread usage 命令,如果可以看到 spread 命令的相关说明的话, 说明安装正确。

1.1.3 配置说明
编辑程序安装目录下的 etc/spread.conf 文件,将以下内容 Spread_Segment 127.0.0.255:4803 {

localhost }

127.0.0.1

修改为实际运行服务 daemon 的主机信息,如下所示: Spread_Segment 172.16.255.255:4803 { VASDF80 VPN_TEST } Spread_Segment 后面的 ip 为网内的广播地址,4803 为服务 daemon 的端口,VASDF80 和 VPN_TEST 为主机标识,不要超过 20 字节。 注 意 , 同 一 网 段 内 的 主 机 写 到 同 一 个 Spread_Segment 内 , 多 个 网 段 要 写 多 个 Spread_Segment。 172.16.9.12 172.16.9.65

1.1.4 运行服务 daemon
执行下行命令,后台运行服务 daemon。 /home/spread/bin/spread &

2. spread 测试工具介绍
spread 安装目录的 bin 目录下除了 spread 外,还有 spmonitor,spuser 和 spflooder 等几 个小程序,可用于测试 spread 服务 daemon 是否正常运行。

2.1 spmonitor 介绍 2.1.1 命令参数
这是一个监控程序,可以监控一个或者全部的 spread 服务 daemon 的服务状态、发送 以及接收到的信息统计数据等等。命令行下输入 spmonitor usage,控制台将显示 spmonitor 的参数说明: [-p <port number>]: specify port number,默认为 4803 端口。 [-n <proc name>] : force computer name,默认为随机名字。 [-t <status timeout>]: specify number of seconds between status queries,默认为 10 秒。 [-c <file name>] : specify configuration file,默认为安装目录下的 etc/spread.conf 文件。

2.1.2 使用介绍
在 spmonitor 安装目录下执行 spmonitor 命令,控制台显示如下: ============= Monitor Menu: ------------0. Activate/Deactivate Status {all, none, Proc, CR}

1. Define Partition 2. Send Partition

3. Review Partition 4. Cancel Partition Effects

5. Define Flow Control 6. Send Flow Control

7. Review Flow Control

8. Terminate Spread Daemons {all, none, Proc, CR}

r. Reload Configuration File

9. Exit

输入 0,之后提示输入要监控的 spread daemon 服务名,如下所示 ============= Activate Status -------------

Enter Proc Name:

输入在 spread.conf 中 Spread_Segment 段内相应的主机标识,之后控制台提示再次输入 要监控的 spread daemon 服务名,此时直接回车,即可看到该 spread daemon 的统计数据,如 下所示,该统计数据定时刷新。 ======================================================== Status at VASDF80 V 4.00. 0 (state 4, gstate 1) after 9501 seconds : Membership : 1 procs in 1 segments, leader is VASDF80 rounds : 1224 tok_hurry : recv pack : s retrans : 0 0 46273 0 Aru Groups : : 0 4355 10017 0 memb change: retrans b retrans : 0 Highest seq: Window Pers Window: Delta sec : : : 45 0 0 60 15 10 6

sent pack: 1752521 u retrans: My_aru Sessions : Deliver M: Delta Mes: : 45

Deliver Pk: 1762554 Delta Pack: 0

第 2 行:当前存活的 daemons 的总数,以及它们是在几个分段里; 第 4 行:实际收发数据包数,不是收发消息的总个数; 第 7 行:Sessions 是连接到本 daemon 的客户端个数,Groups 是整个系统当前存在的用 户组的个数; 第 8 行:Deliver M 是本 daemon 发送的消息个数的累计值,Deliver Pk 是本 daemon 发 送的数据包数的累计值,该值可能会大于 Deliver M 值,因为一个大数据量的消息会分成多 个数据包发送。 第 9 行:Delta Mes 和 Delta Pack 是 Deliver M 和 DeliverPk 在本次查询和上次查询的差 值。 第 10 行:本次查询和上次查询的时间差值。

2.2 spuser 介绍 2.2.1 命令参数
通过执行 spuser 命令可以对 spread toolkit 进行简单的功能测试。命令行下输入 spuser

usage, 控制台将显示 spuser 的参数说明: Usage: spuser [-u <user name>] : unique (in this machine) user name,指定一个唯一的用户名,默认为 user,该用户名在整个系统内必须唯一。 [-s <address>] : either port or port@machine,指定要连接的 spread daemon 的 IP 地址

和端口或主机名和端口,默认为本机的 4803 端口。 [-n <username>] : username for authentication, 当要接入的 spread daemon 要求身份认

证时,使用本参数提供用户名。 [-p <password>] 本参数提供口令。 [-r ] : use random user name,使用随机用户名。 : users password,当要接入的 spread daemon 要求身份认证时,使用

2.2.2 使用介绍
开启一个新的控制台,输入下面命令, spuser -u user1 就会看到一个控制界面,显示如下:

j <group> -- join a group l <group> -- leave a group s <group> -- send a message b <group> -- send a burst of messages r -- receive a message (stuck) p -- poll for a message e -- enable asynchonous read (default) d -- disable asynchronous read q -- quit 输入 j test ,表示本用户加入 test 组,就会收到组信息如下:

Received REGULAR membership for group test with 1 members, where I am member 0: #user1#VPN_TEST grp id is -1408235252 1238116743 1 Due to the JOIN of #user1#VPN_TEST

这时候再开启一个控制台,spuser -u user2 ,同样也 j test,然后 s test,在需要 输入信息的时候,输入 hello,表示向 test 组发送消息,消息内容为 hello,这时候,你 可以在两个控制台都看到: received SAFE message from #user1#VPN_TEST, of type 1, (endian 0) to 1 groups (6 bytes): hello

2.3 spflooder 介绍 2.3.1 命令参数
spflooder 是一个性能测试程序,可以大规模发送数据给服务。命令行下输入 spflooder usage, 控制台将显示 spflooder 的参数说明: Usage: spflooder [-u <user name>] : unique (in this machine) user name,指定一个唯一的用户名,默

认为 user,该用户名在整个系统内必须唯一,spflooder 会将该用户加入 flooder 组。 [-m <num messages>] : number of messages,要发送和接收的消息个数。 [-n <num members>] : number of group members to wait for (also turn on multi-sender

FC),指定整个组应该包含的成员个数,spflooder 等待所有成员加入后,再发送或接收消息。 [-b <num bytes>] 度,最大为 100000 字节。 [-s <spread name>] : either port or port@machine,指定要连接的 spread daemon 的 IP : number of bytes per message 1-100,000,每个消息内容的数据长

地址和端口或主机名和端口,默认为本机的 4803 端口。 [-ro] [-wo] : read only (no multicast), 指定本 spflooder 仅用于接收消息。 : write only (no receive),指定本 spflooder 仅用于发送消息。

2.3.2 使用介绍
主机 A、B 分别启动 spread daemon,在主机 A 的控制台输入 spflooder –u user1 –m 10000 –ro ,表示该 flooder 程序仅接收 10000 条发送给 flooder 组的 消息, 接着在主机 B 的控制台输入 spflooder –u user2 –m 10000 –b 1000 ,表示向 flooder 组发 送 10000 条消息,每条消息数据位 1000 字节。之后在主机 A 的控制台界面,可以看到主机 A 的 spflooder 收到了这些消息,显示如下: flooder: connecting to 4803@localhost flooder: Only receiving messages flooder: completed flooder: completed flooder: completed flooder: completed flooder: completed flooder: completed flooder: completed flooder: completed flooder: completed 1000 messages of 1000 bytes 2000 messages of 1000 bytes 3000 messages of 1000 bytes 4000 messages of 1000 bytes 5000 messages of 1000 bytes 6000 messages of 1000 bytes 7000 messages of 1000 bytes 8000 messages of 1000 bytes 9000 messages of 1000 bytes

flooder: completed 10000 messages of 1000 bytes flooder: completed multicast of 10000 messages, 1000 bytes each.

3. 客户端开发说明
3.1 简单说明
spread 开发包是开源的高性能的分布式分组消息系统,支持局域网以及广域网通讯。 spread 可以作为一个分布式应用的消息总线, 并且具有高度的灵活性, 可以做到多播, 分组, 以及点对点的消息传递。客户端可以编程实现向指定的一个组或多个组发送指定消息, spread daemon 将保证这些消息可靠的、有序的传递到各接收端。有关 spread 开发包的详细 介绍和接口说明,可参考网址:http://www.spread.org 。

3.2 客户端开发接口
spread 提供了 c,java,python 等编程接口,在此仅介绍 c 编程接口。

3.2.1 函数返回值宏定义
在头文件 sp.h 中定义了函数返回值的宏定义,如下:

#define ACCEPT_SESSION #define ILLEGAL_SPREAD #define COULD_NOT_CONNECT #define REJECT_QUOTA #define REJECT_NO_NAME #define REJECT_ILLEGAL_NAME #define REJECT_NOT_UNIQUE #define REJECT_VERSION #define CONNECTION_CLOSED #define REJECT_AUTH #define ILLEGAL_SESSION #define ILLEGAL_SERVICE #define ILLEGAL_MESSAGE #define ILLEGAL_GROUP #define BUFFER_TOO_SHORT #define GROUPS_TOO_SHORT #define MESSAGE_TOO_LONG #define NET_ERROR_ON_SESSION

1 -1 -2 -3 -4 -5 -6 -7 -8 -9 -11 -12 -13 -14 -15 -16 -17 -18

3.2.2 消息服务类型和消息类型
spread 提供以下六种消息服务类型:

#define UNRELIABLE_MESS #define RELIABLE_MESS #define FIFO_MESS #define CAUSAL_MESS #define AGREED_MESS #define SAFE_MESS

0x00000001 0x00000002 0x00000004 0x00000008 0x00000010 0x00000020

UNRELIABLE_MESS,不可靠的消息发送,消息可能丢失或重发,重发的情况极少。 RELIABLE_MESS,可靠的消息发送,保证各接收方收到且只收到一次,但是时间上可 能会有延迟, 而且不保证收到的消息顺序就是发送的消息顺序, 即收到的消息可能顺序错乱。 FIFO_MESS,可靠的消息传送,而且保证收到的从同一消息源发来的消息顺序与发送 顺序是一致的,不同消息源发来的消息的接收顺序是没有保证的。 CAUSAL_MESS,可靠的消息传送,在 FIFO_MESS 的基础上,根据 Lamport 定义的顺 序来保证不同消息源发送消息的接收顺序。 AGREED_MESS,可靠的消息传送,在 FIFO_MESS 的基础上,根据各接收方都同意的 顺序发送消息。 SAFE_MESS,可靠的消息传送,在 AGREED_MESS 的基础上,当所有的 daemon 都收 到该消息后,才会进行投递。只要一个应用程序收到一条 SAFE 消息,同组的所有应用都会 收到该消息。 spread daemon 发 出 的 消 息 可 分 为 两 类 , 一 类 是 常 规 消 息 , REGULAR_MESS (0x0000003f) ,另一类是组成员通知消息, MEMBERSHIP_MESS(0x00003f00) 。通过设置 SP_connect 函数的 group_membership 成员,可控制是否接收组成员通知消息。有关组成员 通 知 消 息 的 详 细 说 明 , 请 参 考 网 址 :

http://www.spread.org/docs/spread_docs_4/docs/message_types.html 。

3.2.3 SP_connect
int SP_connect (const char *spread_name, const char *private_name, int priority, int group_membership, mailbox *mbox, char *private_group); int SP_connect_timeout (const char *spread_name, const char *private_name, int priority, int group_membership, mailbox *mbox, char *private_group, sp_time time_out);

函数功能: 与一个指定的 spread daemon 建立连接 输入参数: spread_name, 表示要连接的 spread daemon 的名字字符串,可以有以下形式: 4803,表示连接在本机 4803 端口上运行的 spread daemon ,这种方式不能连接 win95/winNT 主机; 4803@localhost,表示同上,可以用于连接 win95/winNT 主机; 4803@host.domain.edu 或 4803@128.220.221.99,表示连接在指定主机,指定端口 上运行的 spread deamon。

private_name, 指定一个唯一的用户名,该用户名在整个系统内必须唯一,用户名最多为
10 个字节。 priority,取值为 0/1 的优先级,现在没有意义。 group_membership,bool 值,if 1,该连接会收到组成员信息通知,这时,应用需处理收到 的组成员消息;if 0,不会收到组成员信息通知。 time_out,超时时间 输出参数: mbox,mailbox 类型的指针,成功调用后该指针指向的 mailbox 将代表该连接,后续的函数 调用都要使用在此得到的 mailbox 值。 private_group,返回该用户在组中的标识名,每个用户的标识名是唯一的,可使用此标识名 进行一对一的消息发送。

返回值: ACCEPT_SESSION,成功 ILLEGAL_SPREAD,指定的 spread_name 不合法 COULD_NOT_CONNECT,与指定的 spread_name 无法建立连接 CONNECTION_CLOSED,连接过程中出错以致无法建立连接 REJECT_VERSION,连接双方使用的版本不对 REJECT_NO_NAME,用户名长度有误,连接被拒绝 REJECT_ILLEGAL_NAME,用户名非法或超过了 10 个字节 REJECT_NOT_UNIQUE,用户名已被使用,可以尝试用其它用户名进行连接

3.2.4 SP_disconnect
int SP_disconnect (mailbox mbox);

函数功能: 关闭 mbox 与 spread daemon 的连接 输入参数: mbox,表示要关闭的连接 返回值: 0,成功 ILLEGAL_SESSION,mbox 表示的连接为无效连接 说明: 如果在 SP_XX 调用中发生了 CONNECTION_CLOSED 或 NET_ERRROR_ON_SESSION 错 误,那么该 SP_XX 使用的 mailbox 就不能再使用了,这时应该使用 SP_disconnect 先关闭连 接,再与 daemon 重新建立连接。

3.2.5 SP_kill
SP_kill (mailbox mbox);

函数功能:

关闭 mbox 与 spread daemon 的连接,并且不会通知 spread daemon。当使用 fork()产生一 个子进程后,可以使用 SP_kill 关闭父进程或子进程中 mbox 与 spread daemon 的连接,而另 一个 mbox 仍保持与 spread daemon 的连接。 返回值: 0,成功 ILLEGAL_SESSION,mbox 表示的连接为无效连接

3.2.6 SP_join
int SP_join (mailbox mbox, const char *group);

函数功能: 将 mbox 表示的连接加入组 group,group 表示组名。应该调用这个函数来加入指定组,之后 就可以向加入的组收发消息。可以多次调用本函数来加入多个组。 返回值: 0,成功 ILLEGAL_GROUP,group 表示的组名非法,group 组名长度应大于 0,小于 32 ILLEGAL_SESSION,mbox 表示的连接异常 CONNECTION_CLOSED,通信过程出错

3.2.7 SP_leave
int SP_leave (mailbox mbox, const char *group);

函数功能: mbox 表示的连接退出 group 组。 返回值: 同 SP_join。

3.2.8 消息发送函数
int SP_multicast (mailbox mbox, service service_type, const char *group, int16 mess_type,int mess_len, const char *mess); int SP_scat_multicast (mailbox mbox, service service_type,const char *group,int16 mess_type, const scatter *scat_mess); int SP_multigroup_multicast (mailbox mbox, service service_type, int num_groups,const char groups[][MAX_GROUP_NAME], int16 mess_type,int mess_len, const char *mess); int SP_multigroup_scat_multicast (mailbox mbox, service service_type, int num_groups, const char groups[][MAX_GROUP_NAME], int16 mess_type, const scatter *scat_mess);

函数功能: SP_multicast 和 SP_scat_multicast 只能向一个组发送消息,SP_multigroup_multicast 和 SP_multigroup_scat_multicast 可以向一个或多个组发送消息。 输入参数: mbox,连接标识符 service_type,服务类型,见 3.2.2 中消息服务类型的说明。该值可以与 SELF_DISCARD(0x00000040)进行或运算, 表示发送消息的应用程序不会再收到该条消息 (默 认发送消息的应用程序会收到自己发送的消息)。 num_groups,如果要多播给多个组,num_groups 表示这些组的个数。 groups,保存要多播的一个或多个组的组名。 mess_type,16 位整形数据,消息发送方设置该参数,消息接收方会收到该参数,应用程序 可以使用本参数做一些标记。 mess_len,消息长度,每次发送的消息不要超过 100K 字节。 mess,消息数据地址。 scat_mess,用 scatter 结构封装的消息的地址。 返回值: >=0, 发送成功,返回发送的字节数。

ILLEGAL_SESSION,mbox 连接异常 ILLEGAL_MESSAGE,scat_mess 指向的结构非法 CONNECTION_CLOSED,通信过程中出错,发送没有完成

3.2.9 消息接收函数
int SP_receive (mailbox mbox, service *service_type, char sender[MAX_GROUP_NAME], int max_groups, int *num_groups, char groups[][MAX_GROUP_NAME], int16 *mess_type, int *endian_mismatch, int max_mess_len, char *mess); int SP_scat_receive (mailbox mbox, service *service_type, char sender[MAX_GROUP_NAME], int max_groups, int *num_groups, char groups[][MAX_GROUP_NAME],int16 *mess_type, int *endian_mismatch, scatter *scat_mess);

函数功能: 消息接收函数,该函数不仅接收常规消息,也接收组成员通知消息。当没有消息到来时,该 函数的调用将阻塞。可使用 spread 开发包提供的事件接口来实现消息的异步接收,事件机 制 的 详 细 说 明 可 以 参 考 网 址 :

http://www.spread.org/docs/spread_docs_4/docs/events_interface.html 。 输入参数: mbox,连接标识符 service_type,指向的 service 置 0 或 DROP_RECV(0x01000000),当指向的 service 置为 DROP_RECV 时,如果接收函数提供的 mess 或 groups 小于接收到的数据时,消息数据或组 名信息将被截断。 sender,用来表示消息发送方 max_groups,groups 数组能缓存的最大组个数 num_groups,置 0,返回消息要发送给的组的个数 groups,接收消息要发送给的各组的组名信息 mess_type,返回消息发送方设置的该消息的 mess_type

endian_mismatch,返回发送主机和接收主机的字节序是否相同,它的返回值为收到包的实 际 长 度 , 为 长 度 的 负 值 , 当 传 入 的 参 数 值 max_mess_len 小 于 该 值 时 , 将 出 现 -15 (BUFFER_TOO_SHORT)错误。 max_mess_len,消息接收缓冲 mess 的最大长度 mess,消息接收缓冲地址 输出参数: service_type,指向的 service 值为收到的消息的 service_type 值,可能为 REG_MESSAGE 或 MEMBERSHIP_MESS。 其 它 输 出 参 数 的 值 与 sevice_type 的 值 相 关 , 详 细 说 明 可 以 参 考 网 址 : http://www.spread.org/docs/spread_docs_4/docs/sp_receive.html 。 返回值: >=0,成功,返回收到的字节数 ILLEGAL_SESSION,mbox 指向的连接异常 ILLEGAL_MESSAGE,收到的消息结构非法 CONNECTION_CLOSED,通信过程中出错,接收没有完成 GROUPS_TOO_SHORT,groups 缓冲太小 BUFFER_TOO_SHORT,mess 缓冲太小

3.3 编译运行
使用上面的函数时,需包含头文件 sp.h,编译时需链接库 libspread。


相关文档

更多相关文档

MQ的说明
MQ配置文档说明手册
IBM Websphere MQ 安装说明
MQ安装详细说明
MQ配置说明
MQ-2000PT产品说明书
MQ操作说明
MQ600电动机使用说明书
按键精灵Android版MQ语言基础说明
MQ-2使用说明
音频放大电路课程设计 2
电脑版