当前位置:文档之家› tibcoEMS应用

tibcoEMS应用

一、EMS基本应用

TIBCO Enterprise Message Service 是一个消息服务器产品,它采用C语言编写,
完全支持JMS的通讯协议,在运行速度和消息吞吐量上表现非常出色,
对于Windows、Linux、Mac、AIX平台都提供支持,关于这个产品,我也是刚刚接触不久,
以下是本人一段时间使用的一个小结:

1、将EMS设置为控制访问模式
默认安装好的EMS对于消息队列(Queue) 或者消息主题(Topic) 的访问是不需要口令的,
显然在任何生产环境中都不会让这样的设置存在,我们第一步要做的事情就是打开服务的访问控制:
启动 EMS Administration Tool ,使用管理员(admin)身份登录,密码初始为空,敲入命令

tcp://192.168.1.23:7222> set server authorization=enabled
Server parameters have been changed

2、更改管理员登录口令
设置好了访问控制,下一步就是修改管理员密码:
tcp://192.168.1.23:7222> set password admin admin
Password of user 'admin' has been modified

set password 是一个控制命令,这句话的意思是将用户 admin 的密码设置为 admin。

3、创建用户和用户组
创建用户组 emsgroup:
tcp://192.168.1.23:7222> create group emsgroup
Group 'emsgroup' has been created
创建用户 emsuser:
tcp://192.168.1.23:7222> create user emsuser password=emsuser
User 'emsuser' has been created
将用户添加至用户组中:
tcp://192.168.1.23:7222> add member emsgroup emsuser
Group 'emsgroup' has been modified
查看用户是否添加成功:
tcp://192.168.1.23:7222> show group emsgroup
Group: emsgroup
Description:
Users: 1
以上显示组 emsgroup 中有一个用户,显然就是 emsuser 这个用户。

4、创建消息队列
创建一个名叫 nanjing 的消息队列:
tcp://192.168.1.23:7222> create queue nanjing
Queue 'nanjing' has been created

5、为用户分配访问权限
为用户 emsuser 分配 receive,send,browse 的权利:
tcp://192.168.1.23:7222> grant queue nanjing emsuser receive,send,browse
Permissions have been changed

好了,现在就可以使用 JMS 客户端向服务器的7222端口上发送消息了,使用的用户名就是我们
刚才设置的 emsuser 口令是 emsuser,消息队列的名称:nanjing。


二、EMS容错配置
Ems容错配置(翻译)

注意:在实际环境中ems数据应存储在SAN或NAS中,以便主服务器和备份服务器都能访问存储数据。

SAN-Storage Area Network
NAS-Network Area storage
但在我们的例子里,我们只使用操作系统的文件系统(由主服务器和备份服务器共享)

1、容错配置

为了便于区别,参数用斜黑体表示。


配置主服务器

打开c:\tibco\ems\bin\tibemsd.conf (该文件称作Ems配置文件)

Server=EMS-SERVER-RAMU(该值取决于您的选择)

Listen=tcp://7222(该值取决于您的选择)
Ft_active=tcp://7444(该值取决于您的选择)


配置备份服务器

在bin目录下创建Backup目录,并把c:\tibco\ems\bin\ 目录下的*.conf 文件(只是配置文件)拷贝到c:\tibco\ems\bin\Backup\

注意:从现在起,我们将在Backup目录下工作,打开该目录下的tibemsd.conf 文件

Server=EMS-SERVER-RAMU(这个值必须和主服务器的tibemsd.conf 文件中的服务器参数的值一致)
Listen=tcp://7444(这个值必须和主服务器的tibemsd.conf 文件中的Ft_active 参数的值一致)
Ft_active=tcp://7222(这个值必须和主服务器的tibemsd.conf 文件中的监听参数的值一致)
store=c:\tibco\ems\bin\datastore(这个值必须和主服务器的tibemsd.conf 文件中的存储参数store,注意主服务器的tibemsd.conf 文件中的这个值正好是datastore)


在备份服务器tibemsd.conf的下述列表中,前面加上路径c:\tibco\ems\bin\Backup\

users=c:\tibco\ems\bin\Backup\users.conf
groups=c:\tibco\ems\bin\Backup\groups.conf
topics=c:\tibco\ems\bin\Backup\topics.conf
queues=c:\tibco\ems\bin\Backup\queues.conf
acl_list=c:\tibco\ems\bin\Backup\acl.conf
factories=c:\tibco\ems\bin\Backup\factories.conf
routes=c:\tibco\ems\bin\Backup\routes.conf
bridges=c:\tibco\ems\bin\Backup\bridges.conf
transports=c:\tibco\ems\bin\Backup\transports.conf
tibrvcm=c:\tibco\ems\bin\Backup\queues.conf
durables=c:\tibco\ems\bin\Backup\durables.conf

如果您观察主服务器的 tibemsd.conf文件,并和备份服务器的 tibemsd.conf文件对比,您会发现主服务器的tibemsd.conf文件中的某些参数未指明路径。例如"users=users.conf"在备份服务器的tibemsd.conf 文件中我们定义为"users=c:\tibco\ems\bin\Backup\users.conf"。之所以这样是因为安装ems服务器时,设置了这些值,知道在哪个路径下查找,所以在主服务器的tibemsd.conf文件中各参数没有包含完整路径。

2、运行服务器

进入“所有程序”>“运行”>输入"cmd"

得到window下的命令提示符,输入命令:cd c:\tibco\ems\bin
现在进入bin目录

启动主服务器

输入命令:tibemsd(这是一个应用程序)

启动备份服务器

打开另一个命令提示符,输入下列命令,进入相应目录:cd c:\tibco\ems\bin
输入如下命令,启动备份服务器:
tibemsd -config Backup\tibemsd.conf (备份服务器以此方式启动,主服务器不用,因为主服务器的tibemsd.conf文件和tibemsd应用程序在同一个目录)

在备份服务器命令提示行可以看到它处于standby模式(tcp://7222)


三、如何查看QUEUE里面的MSG被那台机器吃掉

可以看到队列CS.B2B.PROC_REQ.0001.JOB_REQ.PREP.CUSSTDAK997.IN.QUE的msg都被来自testwebdev44的应用吃掉了

tcp://hksudv38:7262> show consumers queue=CS.B2B.PROC_REQ.0001.JOB_REQ.PREP.CUSSTDAK997.IN.QUE

Msgs Sent
Id Conn User T Queue SAS Sent Size Uptime
700145 360644 b2bapp Q CS.B2B.PROC_REQ.0001.JOB_REQ.PREP.CUSSTDAK997.IN.QUE +T- 0 0 30:32:25
700146 360644 b2bapp Q CS.B2B.PROC_REQ.0001.JOB_REQ.PREP.CUSSTDAK997.IN.QUE +T- 0 0 30:32:25
700147 360644 b2bapp Q CS.B2B.PROC_REQ.0001.JOB_REQ.PREP.CUSSTDAK997.IN.QUE +T- 0 0 30:32:25
700148 360644 b2bapp Q CS.B2B.PROC_REQ.0001.JOB_REQ.PREP.CUSSTDAK997.IN.QUE +T- 0 0 30:32:25
700149 360644 b2bapp Q CS.B2B.PROC_REQ.0001.JOB_REQ.PREP.CUSSTDAK997.IN.QUE +T- 0 0 30:32:25

tcp://hksudv38:7262> show connections type=Q full
L Version ID FSXT S Host IP address User ClientID
Sess Prod Cons TmpT TmpQ Uptime

.
.
.
J 5.1.0 V10 360644 ---Q + testwebdev44 146.222.75.148 b2bapp BW-Main-Connection-queue-B2B-APP-ACK-B2B-APP-ACK

38 13 25 0 0 31:36:38
.
.
.


转自:http://sid.gd/archives/265

由于版本号不同,命令也有所不同,具体可查看用户手册

tcp://localhost:7022> show stat consumers queue=testQueue
Total Count Rate/Second
User Conn T Destination Msgs Size Msgs Size
dmsesb 9 Q testQueue 2 0.5 Kb 0 0.0 Kb

tcp://localhost:7022> show connections version address
L Version ID FSXT S Host Address User ClientID Sess Uptime


可以看到队列CS.B2B.PROC_REQ.0001.JOB_REQ.PREP.CUSSTDAK997.IN.QUE的msg都被来自testwebdev44的应用吃掉了

tcp://hksudv38:7262> show consumers queue=CS.B2B.PROC_REQ.0001.JOB_REQ.PREP.CUSSTDAK997.IN.QUE
Msgs Sent
Id Conn User T Queue SAS Sent Size Uptime
700145 360644 b2bapp Q CS.B2B.PROC_REQ.0001.JOB_REQ.PREP.CUSSTDAK997.IN.QUE +T- 0 0 30:32:25
700146 360644 b2bapp Q CS.B2B.PROC_REQ.0001.JOB_REQ.PREP.CUSSTDAK997.IN.QUE +T- 0 0 30:32:25
700147 360644 b2bapp Q CS.B2B.PROC_REQ.0001.JOB_REQ.PREP.CUSSTDAK997.IN.QUE +T- 0 0 30:32:25
700148 360644 b2bapp Q CS.B2B.PROC_REQ.0001.JOB_REQ.PREP.CUSSTDAK997.IN.QUE +T- 0 0 30:32:25
700149 360644 b2bapp Q CS.B2B.PROC_REQ.0001.JOB_REQ.PREP.CUSSTDAK997.IN.QUE +T- 0 0 30:32:25

tcp://hksudv38:7262> show connections type=Q full
L Version ID FSXT S Host IP address User ClientID
Sess Prod Cons TmpT TmpQ Uptime

.
.
.
J 5.1.0 V10 360644 ---Q + testwebdev44 146.222.75.148 b2bapp BW-Main-Connection-queue-B2B-APP-ACK-B2B-APP-ACK

38 13 25 0 0 31:36:38
.
.
.


转自:http://sid.gd/archives/265

由于版本号不同,命令也有所不同,具体可查

看用户手册

tcp://localhost:7022> show stat consumers queue=testQueue
Total Count Rate/Second
User Conn T Destination Msgs Size Msgs Size
dmsesb 9 Q testQueue 2 0.5 Kb 0 0.0 Kb

tcp://localhost:7022> show connections version address
L Version ID FSXT S Host Address User ClientID Sess Uptime


四、Tibco EMS routing 设置

Tibco Enterprise Message Service (EMS) 是一个兼容JMS标准的实现,是整个Tibco产品中的重要一环。Tibco组件除了可以用它构建整个管理域外,也使用它传递业务数据。通常业务整合的两个或多个party会使用并管理自己的EMS, EMS 支持信息EMS(A) routing 到MES(B)。可是往往由于设置不当造成无法通讯
假设现在有两台EMS服务器,名字分别是BLADE和VAMPIRE。注意这里的服务名字至关重要,登陆EMS管理界面后运行show server

这里的服务名是在tibemsd.conf里配置,与机器名无关。
下一步要检查EMS的其他设置,运行命令show config

routing的设置的复杂程度在authorization=enabled/disabled的不同情况下有很大区别,无论何种情况一定要修改tibemsd.conf设置为routing=enabled并重启EMS。

1)authorization=disabled ,注意这是BLADE的设置,这表明这是其他EMS(例如VAMPIRE)作为客户登陆入BLADE不需要用户名和密码。假设我们希望队列mysample里的信息能从VAMPIRE流向BLADE,首先要在VAMPIRE里建立routing, 命令如下:create route BLADE url=tcp://hostname:port

这里BLADE是信息流向的EMS的服务名,一定要注意不能弄错,否则无法发送到BLADE,以后引用这个route就用BLADE表示即可。接下来我们在BLADE这个EMS里建立带有global属性的mysample队列,所有可以接受来自其他EMS的队列必须带有global属性。create queue mysample global

最后一步是在VAMPIRE中建立同样名字的队列,命令和在BLADE中的有所差别:create queue mysample@BLADE这里@BLADE表明这个队列的所有者是route BLADE所指向的EMS,所有发送到VAMPIRE 队列mysample的信息都能流向BLADE。

2)authorization=enabled ,注意这仍然是BLADE的设置,这表明这是其他EMS(例如VAMPIRE)作为客户登陆入BLADE需要用户名和密码。要启动该选项,输入命令:

set server authorization=enabled

改变该设置并不需要重启服务。此时我们可以发现信息都pending在VAMPIRE这台EMS中。我们要在BLADE建立用户帐号如下:

create user VAMPIRE password=12345

这里一定要注意VAMPIRE是帐号,一定要是要登录进来的服务名。最后一步是设置VAMPIRE这台EMS,EMS会用自己的服务名来登录,关键就是设置密码:

set server password=12345

VAMPIRE会用这个密码登入BLADE,我们可以发现信息又可

以routing到BLADE。


五、EMS 动态queue

在EMS里,动态queueu是由application产生的,而静态queue是由管理界面或修改config文件创建的. 动态queue有很大的灵活性,在某些场合比使用静态queue更适合。有关讨论可以看JMS。

1)EMS的动态queue是以 "*" 作为开头,还有一种特殊的动态queue叫临时queue, "*"开头后紧跟$TMP$
2)如过动态queue没有consumer也没有信息在队列中,ems会择机清除该queue
3)临时queue的名字是由EMS server生成,只有在创建该queue的session才能消费里面的内容。EMS 重起后临时queue会被清除,不管里面有无内容。
4)要允许application创建动态queue,queues.conf 必须使用wildcard进行配置。


六、整合Tibco和JBoss的补充说明

本文补充说明整合Tibco Ent. for JMS与JBoss中的几个问题。

第一部分 SSL

要在Tibco Ent. for JMS中使用SSL,有以下几步:

1、修改tibjmsd.conf文件,在TIBCO/JMS/bin目录下,

找到 listen = tcp://7222

改成
listen = tcp://localhost:7222
listen = ssl://localhost:7223

让Tibco用不同的协议同时监听两个端口。

再配置以下几个SSL属性:
ssl_server_identity = certs/server.cert.pem
ssl_server_key = certs/server.key.pem
ssl_password = password

然后,启动tibjmsd,在控制台应该可以看到如下信息:

Secure Socket Layer is enabled.
Accepting connections on ssl://localhost:7223.
Accepting connections on tcp://localhost:7222.

2、把tibcrypt.jar文件也拷入%JBOSS_HOME%libext目录下。

3、修改jndi.properties,加上以下两句:
com.tibco.tibjms.naming.security_protocol=ssl
com.tibco.tibjms.naming.ssl_enable_verify_host=false

4、修改jboss.jcml,

找到 TIBCOJMSProvider
在其后再加上一句 ssl://localhost:7223

再找到
tcp://localhost:7222/QueueConnectionFactory
换成:
ssl://localhost:7223/SSLQueueConnectionFactory

同理,把
tcp://localhost:7222/TopicConnectionFactory
也换成
ssl://localhost:7223/SSLTopicConnectionFactory

5、在客户端的JNDI中,也要相应修改一下

private static Context getTibcoContext() throws NamingException {
String providerContextFactory = "com.tibco.tibjms.naming.TibjmsInitialContextFactory";
String defaultProviderURL = "ssl://localhost:7223";
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY,providerContextFactory);
env.put(Context.PROVIDER_URL,defaultProviderURL);
return new InitialContext(env);
}



第二部分 Routing

Tibco的Routing用集群服务来提高消息接收的效率。它与一般概念上的负载均衡的区别在于,它有一个消息拥

有者,它是保存消息的所在,但是可以通过路由在多个节点传递消息。比如我们有三台服务器:A、B和C,定义B是消息拥有者,我们将消息发到A,然后MDB从C接收消息。情况会怎样?大家可以试一下:)

要实现Route,只需简单地修改一下tibjmsd.conf和routes.conf文件即可。

下面,我们在一台机器上启动两个服务来说明routing的配置。

1、先把Tibco/JMS/bin目录改名复制一份,比如 JMS_2/bin/,

修改其下的tibjmsd.conf文件:

server = E4JMS-SERVER2
...
listen = tcp://localhost:7022

这样就与原来的服务E4JMS-SERVER和端口7222区别开,我们可以在一台机器上同时启动两个服务了。

2、还是修改tibjmsd.conf,打开 routing = enabled ,两个服务都要打开routing属性。

3、打开JMS/bin目录下的routes.conf文件,应该已有一个route配置(如果没有则加上):

[E4JMS-SERVER2]
url=tcp://localhost:7022

再打开JMS_2/bin目录下的routes.conf文件,同样配置一个route来对应上面的route,把原来的修改如下:

[E4JMS-SERVER]
url=tcp://localhost:7222

4、配置一个需要route的queue,在tibjmsadmin工具中使用如下命令:

在端口7222这个服务中,这样:

create queue queue/testQueue@E4JMS-SERVER2 global

在端口7022这个服务中,这样设置(让它作为消息拥有者):

create queue queue/testQueue global

5、重新分别启动两个服务,会在控制台分别看到如下信息:

Route 'E4JMS-SERVER' accepted from 'tcp://localhost:7222'.



Connected to route 'E4JMS-SERVER2' at 'tcp://localhost:7022'.

说明两个server已被routing成功。
客户端只需发送消息到任何一个服务的queue/testQueue队列,Tibco已经为其实现了负载均衡。

七、EMS SERVER

Note: From Tibco EMS Server document

1. Message Model
Point-to-Point模式(queue):每个Message仅有一个生产者和一个消费者。每个Queue可以有多个生产者和多个消费者。Queue可以被声明具有排它性。具有排它性Queue中的消息只能被第一个消费者获取。不论是否具有排它性,消息被某个消费者获取后,会从Queue中删除。

Publish and Subscribe模式(topic):每个Message可以拥有若干生产者和若干个消费者。消费者根据订阅关系获取topic中的消息。EMS API允许持久性的订阅者,消息会为这些持久性订阅者所保存。

2. Destination
对Message Model功能的提升,主要特征包括:
a.通过secure模式提供queue, topic层面的访问控制,参考secure mode and Destination Control
b.设置queue, topic占用内存空间的约束,参考flowControl and overflowPolicy
c.路由消息到Destination,参考Working With Routes
d.通过在Destinatin之间创建bridge,建立混合型Message Model
e. 控制Message发送到Destination的速度,参考Flow

Control
g. 与其他Message Service交换消息,如queue能够从Tibco Rendezvous, SmartSockets接收消息,topic能够与Tibco Rendezvous, SmartSockets双向交换消息
h. queue可被设置为具有exclusive或者non-exclusive,参考exclusive
i. queue在可以设置redelivery policy,参考maxRedelivery
j. 跟踪,日志消息到Destination的传送过程,参考trace
k.在消息中包含user name,参考sender name and sender name enforced
l. 在Destination name上支持Wildcards
m.在topic, queue上设置failsafe属性,用于把消息同步保存到硬盘上
n. 设置消费者在后台批量接受消息以提供性能,或者设置queue的消息一次只接收一个消息,参考prefetch

3. Client API
提供基于java, .net,COBOL的API。示例代码位于安装目录的samples子目录。EMS同时提供了Java类用于纯粹的Java TIBCO Rendezvous Application来连接EMS Server。

4. Administration
EMS提供了针对Server Operation, Server Object(如ConnectionFactories, Destinations)的管理机制。这些管理功能可以通过Administration Tool的命令行工具实现,也可以通过管理API实现。EMS Client可以通过JNDI来获取Server Object的引用。

管理Server功能:使用Configuration Files, EMS Administration Tool, Authentication and Permissions, Monitor Server Activity(包含Server Activity信息的日志文件,发布关于system event Message到Topic中便于对Server的监控,对不同层次细节的统计分析)。

EMS提供对user, groups的本地化管理,也可以通过外部的LDAP来统一。TIBCO Hawk提供了对EMS Server的管理和监控。EMS Server支持SSL协议,用于Client-Server,

Server-Server间的安全通信。支持backup EMS Server,实现了Fault Tolerance。EMS提供了Server-Server间的消息路由。Topic消息可以在任意多个hop间传递,Queue消息最多在一个hop间传递。EMS支持消息的存储转发。


相关主题
文本预览
相关文档 最新文档