相关文章推荐
大力的饺子  ·  pdfobject.js显示pdf-掘金·  1 年前    · 

http://blog.sina.com.cn/s/blog_7ce87e8501017p8l.html

1 安装 TIBCO Enterprise Message Service

安装 EMS ,需要在主机增加环境变量 TIBCO_HOME ,该变量指定 EMS 的配置文件保存的位置,如果没有该变量,则在安装过程中指定。安装 EMS 有以下三种方式。

可视化安装

控制台安装

Silent 模式安装

1.1 可视化安装

以下步骤介绍可视化安装的步骤:

解压安装介质到某个目录。

运行 TIBCOUniversalInstaller ,出现欢迎界面:

Welcome 界面下点击 Next ,出现以下界面:

LicenseAgreement 界面下,点同意, Next

Installation Home 界面下,为 TIBCO_HOME 指定环境变量,这个变量表示 ems 软件安装在哪里,点 Next

Next

TIBCO Configuration Directory 界面下,指定配置目录,这个目下保存 ems 运行时的各种配置文件,点 Next

TIBCO EMS Service Settings 界面下,选择是否自动启动 ems ,如果选“ Automatic ”,则开机后自动启动 ems 。指定启动 ems 所需的主配置文件所在的位置,点 Next

Pre-Install Summary 界面,点 Next

安装结束。

1.2 控制台安装

控制台模式安装,与可视化安装没有本质区别,只需运行以下命令

TIBCOUniversalInstaller -console

安装过程中所需指定的变量与可视化安装方式相同。

1.3 Silent 模式安装

Silent 模式安装,与之前两种安装方式也没什么区别,只是将安装过程中需要的参数,放在了 TIBCOUniversalInstaller.silent 文件中,如果需要,可以在安装之前修改 TIBCOUniversalInstaller.silent 文件中的参数,然后再运行以下命令即可

TIBCOUniversalInstaller -silent -V responseFile="myfilename.silent"

注: Linux 下的安装过程与 Windows 下基本相同。

1 概述

1.1 JMS 概述

Java Message Service 1.1 (JMS) 是用于应用程序间消息传输的 Java 框架规范。它是由 SUN 联合其他厂商如 IBM TIBCO 等一起制定的,实现了统一的企业应用消息传输接口。

使用消息服务,我们可以更容易的进行企业级应用集成。例如,我们有几个系统,一个是客户管理系统,一个是产品管理系统,还有一个是原材料采购系统。这三个系统,每一个都很重要,但更重要是的,三个系统如何协作,毕竟这才是生产活动的基础。

面向消息的中间件 (Message-oriented-middleware MOM) 使我们能够很轻松的将现存的或者新投产的系统集成起来。 JMS 框架不是指某一类中间件,更不是某一款 MOM 中间件产品,而仅仅是一个框架,一个规范,它的存在只是用于指导 MOM 系统的设计和开发。

TIBCO Enterprise Message Service 是一款实现了 JMS MOM (类似的, IBM MQ 也是一款实现了 JMS MOM ), EMS 同时还可以与 TIBCO 的其他消息服务产品进行集成,比如 TIBCO Rendezvous RV ,另外一款强大的消息传输中间件,是 TIBCO 的起家产品,国外运用很广,国内有上交所和新华社在用,为了达到性能最大化,使用的是 UDP 协议)。这里只介绍 JMS 的概念以及 TIBCO EMS

1.2 JMS 消息模型

JMS 的基础是消息的创建和传输。消息一种应用程序间传输信息的结构化数据单元。 JMS 中,将消息的创建者称为 producer ,消息的接受者,称为 consumer TIBCO EMS 服务器,充当消息传输的媒介,保证消息传输到正确的目的地。同时, TIBCO EMS 也提供一些企业级应用的功能,例如 fault-tolerance (故障切换,有的人叫失效备援),消息路由,与其他消息系统互联(如 TIBCO Rendezvous TIBCO SmartSockets ),下图描述了消息的发送、传输和接收。

JMS 支持三种消息模型:

ü 点对点(队列)

ü 发布 / 订阅(主题)

ü 组播(主题)

1.2.1 点对点(队列)

点对点传输消息传输模型中,每个消息只有一个 producer 和一个 consumer 。这种方式的传输,使用 queue (队列)来存储消息。 Producer 将消息发送到 queue consumer queue 中将消息收走,然后向 queue 发一个 acknowledgement (确认),表示消息已经收到了。多个 Producer 可以向同一个 queue 发消息,多个 consumer 也可以从同一个 queue 收消息。 Queue 可以被配置为 exclusive (互斥或者排外)模式,这意味着,如果某一个 consumer 正在从某个队列收消息,则此时其他 consumer 不能从该队列收消息,只有等第一个 consumer 断开之后,后来的 consumer 才能从该队列收消息。 Exclusive 模式的队列有时比较有用,例如我们同一时间只允许一个接受者接收消息的场景下。如果队列设置为 Non-Exclusive 模式,那么任意一个 consumer 都能从该队列收消息。无论队列是 Exclusive 还是 Non-Exclusive 模式,某一个消息,只能被一个 consumer 收走 。下图描述了一个 non-exclusive 模式队列的消息传输。每个 consumer 接收一个消息,然后向服务器发送一个 acknowledgement ,然后这个消息从队列里被删除,如此,这个消息就不会再被其他 consumer 收走了。

1.2.2 发布 / 订阅(主题)

在发布 / 订阅消息模型中, producer 被叫做 publisher consumer 被叫做 subscriber 。多个 publisher 可向同一个 topic 发消息, publisher 发送的某一个消息,可被多个 subscriber 收走。这种消息模型类似于广播,消息通过网络发布出去,感兴趣的接受者会把消息收走。下图描述了发布 / 订阅消息模型。

默认情况下, subscriber 只有连到 topic 上的时候,才会接受消息。如果一个消息被 publisher 发送到 topic 上,而此时,没有 subscriber topic ,则该消息会被自动丢弃。 EMS 服务器上可以创建 durable subscriber (持久化订阅者),以保证即使 subscriber 没有连接到 topic 上,消息仍然会保存在 topic 里,等到 subscriber 连到 topic 之后,消息再被收走。 durable subscriber subscriber 相比,可以认为每个 durable subscriber 在服务器上,有一块内存,用于暂存消息(当然,实际上并非如此)。

1.2.3 多播

多播消息模型允许一个 producer 将一个消息同时发个多个 consumers 在发布 / 订阅消息模型中, topic 会通过 TCP 协议给每一个 subscriber 发送一份消息的拷贝。 而多播模型中, topic 通过 Pragmatic General Multicast (PGM) 协议发送消息。 subscriber 所在的机器上,有一个 daemon ,该守护进程会从 topic 接收消息,再传输给 subscriber 。多播节省了带宽,但是不能确保把消息发送给所有 subscriber 。下图描述了多播传输模型的过程。

1.3 EMS Destination 特点

什么是 Destination EMS 中,服务器上的 queue topic 都是 destination ,翻译为目的地,意思是要向哪个 queue 或者 topic 建立会话。 EMS 允许我们对每个 destination 的属性进行配置,以增强传输功能。

配置每个 destination 的访问权限。

限制每个 destination 可用来保存数据的存储空间。

对发往某个 destination 的流量进行控制。

不同服务器的队列之间配置路由( route )。

同一个服务器上的队列之间配置桥( bridge )。

queue 设置为 Non-Exclusive 或者 Exclusive 模式。

对进出某个 destination 的消息记录日志。

对每个 destination 的持久化存储进行设置。

配置 queue 是否允许 consumer 批量接收消息。

1.4 Client APIs

Java 程序可以使用 javax.jms 来发收消息。这是 JMS 规范的标准接口,可以用来创建连接,设置消息类型,创建 destination ,收发消息等。由于 EMS 实现了 JMS 的标准规范,因此可以在 www. java.sun.com/products/jms/index.html. 查阅资料

EMS 包含几个例子程序,这些例子演示了 EMS 的不同特性,例子代码位于安装目录中 samples 文件夹下,其中包含 TIBCO Rendezvous 连接 TIBCO EMS 服务器的例子。

1.5 Administration

EMS 提供了一整套机制来管理服务器以及服务器中的对象,例如 ConnectionFactories Destinations 等。管理工作可以通过两种方式进行,一种是通过命令行模式的管理控制台,另一种是调用管理 API

1.6 安全

为了保证服务器和客户端之间,服务器与服务器之间通信的安全,我们可以在服务器中配置 SSL 认证方式。 SSL 是一个在互联网或者局域网上传输加密数据的协议。 SSL 使用公钥和私钥来加密网络上传输的数据。 EMS 支持以下方式使用 SSL

ü 客户端与服务器之间

ü 管理端和服务器之间

ü 管理 API 和服务器之间

ü 存在路由的服务器之间

ü 主备服务器之间

1.7 Fault Tolerance

可以将 EMS 配置为主备模式,来实现故障切换。主机和备机成对的工作,主机接受客户端连接,负责处理消息,当主机发生故障,备机会接管主机的操作变成主机的角色。要使用 EMS Fault Tolerance 特性,必须安装集群文件系统,这是一个限制。

1.8 路由

EMS 提供了在服务器之间路由消息的功能。 topic 的路由可以跨越多跳(并且不能存在回路), queue 的路由只能跨越一跳。 EMS 的路由存在单点故障,因此高可用方面要求较高的系统,不建议采用路由,此外 ITBCO 号称通过路由实现负载均衡,也是不可靠的,这方面的内容后面会论述。

1.9 Transaction

EMS 提供的事务。类似于 Oracle 的事务,收发多个消息,必须进行提交。

1 消息

1.1 EMS JMS 消息进行的扩展

JMS 规范定义的消息包含消息头,属性,消息体三部分。对消息的消息头和消息体格式 JMS 有详细的规定。而属性是用来存放用户定制的信息,以增强 JMS 的功能。 EMS JMS 进行的一些扩展:

JMS 规定了两种传输模式,持久化传输( PERSISTENT )和非持久化传输( NON_PERSISTENT ), EMS 又增加了一种叫做可靠传输( RELIABLE_DELIVERY )。

通常 Consumer 接收消息之后必须向服务器发送针对消息的确认。我们可以在创建会话时指定回话使用 NO_ACKNOWLEDGE 模式,这样 Consumer 接收消息之后不需要向服务器发送针对消息的确认。此外, EMS 还提供 EXPLICIT_CLIENT_ACKNOWLEDGE EXPLICIT_CLIENT_DUPS_OK_ACKNOWLEDGE 两种消息确认模式,后续章节会有描述。

EMS 扩展了 JMS 中的 MapMessage StreamMessage 格式的消息体,以使 EMS 可以和 TIBCO Rendezvous ActiveEnterprise 进行通信。具体请参见相应章节。

1.2 JMS 消息结构

JMS 规定,消息包含三部分,分别是消息头、属性、消息体。其中消息头是必须的,属性和消息体是可选的。

1.2.1 消息头

消息头包含 JMS 预定义了 10 个项,用以消息的传输。

JMSDestination

消息目的地

JMSDeliveryMode

传输模式( NON_PERSISTENT PERSISTENT 等)。

JMSExpiration

消息生存时间。单位为毫秒。该值如果为 0 ,则消息永不过期。客户端向服务器创建连接时,会与服务器进行时间同步,以此来保证消息的生存时间在客户端和服务器上是一致的。这里的时间同步,不是指二者的时间一致,二是二者的时间差保持恒定不变。生存时间涉及的问题较多,除非特别需要,否则不建议使用。

JMSPriority

消息优先级。范围是 0-9 ,值越高,优先级越高。

JMSMessageID

消息提供者为每个消息赋予唯一的消息 id

JMSTimestamp

一条消息被创建时会有一个时间戳,之后消息被交给 provider 发送,消息最终发出的时间,可能会晚于该时间戳。

JMSCorrelationID

通过这个 id 可以从业务层面,将几条消息关联起来。该项是可选的。例如 A 系统之前曾经发送过一条消息给 B 系统,其 ID xxx ,该消息被 B 系统处理之后, B 系统将 JMSCorrelationID 设置为 xxx 发回 A 系统的队列,此时, A 系统可以通过筛选器指定只接受 JMSCorrelationID xxx 的消息。

JMSReplyTo

消息的回复被发往的目的地。该域是可选的。

JMSType

消息类型标识。

JMSRedelivered

如果本域有值,则表示该消息因为某种原因,被多次接收。

1.2.2 属性

在属性部分,我们可以存在自己的信息。 JMS 规范规定了一些属性项,都是以 JMS_TIBCO 开头。无论是 JMS 预定义的属性,还是我们自己定义的属性,所有的属性都是选填的,可以空着。

JMS_TIBCO_CM_PUBLISHER

RVCM sender 的名字,该 RVCM sender TIBCO Rendezvous 导入消息。

JMS_TIBCO_CM_SEQUENCE

RVCM 消息的队列号。

JMS_TIBCO_COMPRESS

消息在发送时是否允许被压缩。

JMS_TIBCO_DISABLE_SENDER

消息发送者名字是否出现在消息中。

JMS_TIBCO_IMPORTED

Rendezvous or SmartSockets 导入消息时,本域由服务器赋值。

JMS_TIBCO_MSG_EXT

扩展了 MapMessage StreamMessage 消息体的类型以包含自消息和数组。

JMS_TIBCO_MSG_TRACE

消息从 producer consumer 的过程中,是否被跟踪。

JMS_TIBCO_PRESERVE_UNDELIVERED

如果消息必须被移除,该消息是否被放在未传输队列里。

JMS_TIBCO_SENDER

消息发送者名称。

JMS_TIBCO_SS_SENDER

ems 服务器从 TIBCO SmartSockets 导入消息时,服务器把 SmartSockets 消息发送者消息头的值放在本域。

Undelivered 消息队列的说明

如果某个消息的生存时间到了,或者该消息的重传次数超过了队列的 maxRedelivery 设置,则该消息就要从队列里删除了。此时,服务器会检查消息的 JMS_TIBCO_PRESERVE_UNDELIVERED 属性,如果属性被设置为 true ,则服务器把这个消息转移到 Undelivered 消息队列 $sys.undelivered 中(这个队列是系统队列,不能被删除)。如果 JMS_TIBCO_PRESERVE_UNDELIVERED 被设置为 false ,那么消息会直接从队列里删除。

使用 undelivered 队列,必须将 JMS_TIBCO_PRESERVE_UNDELIVERED 设置为 true 。这个属性对某一个消息进行设置,不能对某个队列进行设置。我们可以创建一个 consumer 专门接收 undelivered 队列的消息。如果想删除 undelivered 队列的消息,在控制台中执行 purge queue 命令或者调用 administrative API 即可。 undelivered 队列不能创建路由。

Message Sender

当客户端创建一个到服务器的连接时,客户端必须使用一个用户名。队列中 sender_name sender_name_enforced 属性决定消息中 JMS_TIBCO_SENDER 属性是否必须存放用户名。当队列的 sender_name 属性为 true ,而 ender_name_enforced false ,则 producers 可以不提供用户名。 Producers 可以将 JMS_TIBCO_DISABLE_SENDER 设置为 true ,以是消息中不包含用户名,但是如果队列的 sender_name_enforced true ,则服务器会忽略 JMS_TIBCO_DISABLE_SENDER ,用户名必须出现在属性中。

1.2.3 消息体

JMS 的消息,可以有消息体,也可以没有。消息体有下面几种格式:

Message

Message 格式的消息,没有消息体。

TextMessage

字符串格式的消息体

MapMessage

A set of name/value pairs. Name 是字符串对象, value java 的内置类型。

BytesMessage

字节类型消息体。可以用传输二进制数据。

StreamMessage

流类型消息体。

ObjectMessage

可序列化的对象消息体。

消息体的最大长度

EMS 最大支持 512M 的消息体。不过最好别这么干。

1.1 消息优先级

JMS 规范在消息头中定义了个优先级的域,消息发送者可以以此来设置消息的优先级,优先级在 0-9 中取值。 EMS 支持消息优先级(这个域可选),其他厂商的中间件没有都实现。 consumer 有多个消息需要接收时,先接收优先级高的消息。

1.2 消息传输模式

消息头中的 JMSDeliveryMode 域指定了消息传输模式。对主题和队列这两种 destination JMS 支持 PERSISTENT NON_PERSISTENT 两种消息传输模式。 EMS 扩展出第三种传输模式, RELIABLE_DELIVERY 模式。在创建 producer 的时候,可以指定该 producer 发送消息使用的默认的传输模式,也可以在每个消息的消息头中指定该消息通过哪种传输模式发送,此时将忽略 producer 默认的传输模式。

1.2.1 PERSISTENT 模式

producer 发送一个 PERSISTENT 消息时, producer 必须等待服务器返回一个确认。消息被持久化到服务器的磁盘上。这种传输模式保证消息能成功的保存到服务器上。然而这种方式也是有代价的,首先消息 producer server ,要经过一个双向的网络传输,其次, server 要先将消息写入磁盘,才向 producer 返回确认,这导致每秒传输的速率降低。

1.2.2 NON_PERSISTENT 模式

producer 发送一个 NON_PERSISTENT 消息时,没有将消息写入磁盘的过程,这样可以提高性能。

如果主配置文件中的 authorization 参数设置为 disable ,服务器不会给 producer 返回确认;如果该参数设置为 enable ,默认情况下, producer 会像发送 PERSISTENT 消息时一样等待确认,此时,可以通过 npsend_check_mode 来制定服务器是否给 producer 发送确认。

1.2.3 RELIABLE_DELIVERY 模式

EMS 扩展了一种 RELIABLE_DELIVERY 模式,此时,无论 authorization 是否 enable ,服务器都返回确认,以此提高性能。但这种模式有个缺点,如果 authorization 被设置为 enable ,而 producer 向某个 destination 发送消息失败(也许是因为 destination 写错了,些许访问 destination 的权限不足,或者其他原因),但由于 producer 不会收到任何返回,所以 producer 总是认为发送成功了。所以除非特别需要,一般不建议使用这种方式。

1.1 EMS 如何持久化消息

NON_PERSISTENT RELIABLE_DELIVERY 两种传输模式的消息是不会持久化到磁盘的,只有 PERSISTENT 模式消息才会持久化到磁盘。

1.1.1 队列的持久化

发送到队列的持久化消息,总是被写入磁盘。 consumer 接收到消息之前,一旦服务器挂掉,不用担心,待服务器重启之后, consumer 重新建立连接,仍然能收到消息。

1.1.2 主题的持久化

发送到主题的持久化消息,只有当主题拥有 durable subscriber 或者某个 subscriber fault-tolerant 方式的连接时,消息才会被持久化到磁盘,否则,无论消息本身是否持久化的,服务器都不会将消息写入磁盘。这种方式与 JMS 规范是一致的。一个没有 fault-tolerant 连接的非持久化订阅者,在服务器挂掉之后重新连到 topic 上,它被认为是一个新的订阅者,因此它不会受到服务器挂掉之前的消息。

1.1.3 持久化消息和同步文件存储

当进行持久化时,消息是被异步写入磁盘的。其过程是 producer server 发送持久化消息, server 并不等待写入磁盘的动作结束,就向 producer 返回确认。这样是存在问题的,例如, producer 收到了确认,而此时某个消息正在被写入硬盘,就在这时,服务器挂掉了,这就造成了 producer 认为消息发送成功,而 server 实际上没有保存数据的不一致状态。我们可以强制指定服务器使用同步方式来持久化数据,即只有在数据写入硬盘之后,再向 producer 返回确认。具体如何使用同步方式,后续会有描述。

1.1 多种存储方式

发送到服务器上的消息,被存储到磁盘里, EMS 支持三种 store 方式,分别是文件、数据库和 mstores 方式。默认情况下, EMS 使用文件存储消息,创建 EMS 服务器时,系统有三个默认的用以存储消息的持久化文件。我们可以创建自己的 store EMS 中我把 store 称为持久化方式),并且可以将这个 store 与一个数据文件关联,这个数据文件可以放到我们想放的任何位置。关于 store 的配置信息,都保存在 stores.conf 配置文件中。在创建队列是,我们可以为每个队 列都指定一个 store 。每种 store 都有自己的属性,例如,文件 store 具有下面三个属性,其他的属性没有列出来,后面会有描述。

ü 预分配磁盘空间

ü 定时 truncate 磁盘空间

ü 持久化是同步的还是异步的

在实际的部署过程中,我们可以按不同需求,为不同的队列指定不同的 store ,例如,为 A 队列指定一个叫做 SA store ,这个 store 采用同步持久化;为 B 队列指定一个叫做 SB store ,这个 store 采用异步持久化;为 C 队列指定一个叫做 SC store ,这个 store 采用数据库 store 。这三个 store 都位于一个 EMS 服务器中,对用户是透明的。

1.1.1 文件 store

EMS 可以使用文件保存消息,我们可以使用服务器默认的三个文件,也可以创建自己的文件。 EMS 服务器会直接将需要持久化的消息,保存到与队列关联的 store 所对应的的文件中去。

1.1.2 mstores

mstores 这种 store ,比较特殊,它的设计,是为了应对发生故障切换时,备机能够立刻启动而准备的。但是这种方式虽然可以是的故障切换可以立即完成,但是在正常使用时,它的性能是非常差的,其传输消息的速度几乎只有文件 store 的百分之一,因此一般不建议使用。后面会有专门内容描述 mstores 的原理,这里不再赘述。

1.1.3 数据库 store

EMS 也可以将消息持久化到数据库中。但是这种方式的 store 性能也非常滴,仅仅比 mstores 好一点,因此实际生产中也不建议使用。后面会有专门的内容描述如何配置数据库 store

1.1.4 默认的 store

EMS 定义了三个默认的 store

ü $sys.nonfailsafe ,异步持久化方式的 store

ü $sys.failsafe ,同步持久化方式的 store

ü $sys.meta EMS durable subscribers fault-tolerant connections 、以及其他的一些元数据的信息,写入到这个 store

这三个 store 以及他们关联的数据文件,都是在服务器启动时自动创建的,不需要任何配置的步骤。如果我们将这三个 store 对应文件删掉了,服务器在下次启动时,还是会自动创建。我们可以修改这三个 store 的属性已经更改三个 store 关联的数据文件的位置。

1.1.5 配置 store

下面介绍配置文件 store mstores 的步骤,数据库 store 后面会有专门的介绍。

ü 打开 stores.conf 文件,每个 store 都有唯一的名字。

ü 修改参数。文件 store type file 两个参数。 type 指定 store 的方式必, file 参数指定与该 store 关联的数据文件。另外, store 还有些可选的参数,例如消息是同步持久化还是异步持久化,文件的最小大小, EMS 服务器是否定期的 truncate 数据文件以释放空间。 Mstores 同样也有两个参数 type file 。可选的参数包括 scan interval 等。

ü 为每个队列指定关联的 store ,队列的 store 参数,可以在 topics.conf queues.conf 文件中设置,多个 destination 可以关联到同一个 store 中。

ü 也可以在控制台,通过命令行的方式修改文件 store 的属性。

1.1.6 针对 mstores 的特别说明

如果某个队列的 store 属性被关联到了一个 mstores ,那么它是不能在控制台通过命令行的方式来修改的。必须先停止服务器,然后把 mstores 关联的数据文件删掉,再到 topics.conf queues.conf 文件中,修改队列的 store 属性,最后重启服务器。

Mstores 的方式,其设计初衷,是为了在发生故障切换时,使备机能够立刻启动,而不用像普通的 store 那样,先把持久化到磁盘的数据恢复到备机,然后再使备机处于启动状态。

为了实现这种性能, EMS 服务器必须持续的对已经保存的消息进行镜像, EMS 服务器采用渐进式的方式进行数据镜像,对于已经被接受走的消息、或者已经过期的消息、或者被从控制台 purge 的消息,也采用渐进的方式进行删除。

采用渐进式的方式检查和删除数据,为了防止影响服务器的性能。每次更新数据的数据量,受两个参数的控制,这两个参数都可以在 stores.conf 中进行设置。

默认的参数已经是经过优化的了。然后如果保存在磁盘中的数据量如果很大,这时每次镜像读写数据就会影响服务器的性能了。为了减缓这种影响,可以适当镜像读写的间隔时间。

scan_target_interval 参数,这个参数表示所有的数据被镜像读写一次,所允许的最大间隔时间,也就是说,要求服务器,必须在这个总的时间内,把所有的数据都处理一遍。例如,如果 scan_target_interval 设置为 24 小时,服务器会在最多 24 小时的时间内,处理服务器中的每一条消息。由于被 purge 的或者已经过期的消息,只有被镜像一遍之后,才会真正的被 purge 掉或者被当做真正过期的消息,这意味,即使某个时刻我在命令行中运行了 purge 命令,但有可能最多要过 24 小时的时间,这种消息才会被从服务器中删除掉。

scan_iter_interval 参数,每次渐进式检查所间隔的时间。比如将 scan_iter_interval 设定为 10 秒,那么每隔 10 秒钟, EMS 服务器就要执行以此渐进式检查。每次检查的数据量,取决于总的数据量,同时也与 scan_target_interval scan_iter_interval 的比值有关。总的原则是服务器必须在 scan_target_interval 设定的时间内,检查完所有的数据。

比如, scan_iter_interval 设定为 10 秒, scan_target_interval 设定为 1 天,也就是 86,400 秒,同时数据总量为 9G 。那么每间隔十秒, EMS 服务器要一次性检查 1M 左右的数据,这样比每秒检查 100k 的数据,对性能影响小些。如果即便如此,数据库的性能还是降低了,我们可以调大 scan_target_interval

渐进式的镜像和清理数据会影响一些关键数据统计的准确性。在某一个完整的扫描检查完成之前,某些统计数据不一定是真实的,因为 purge 的过期消息并有真的从服务器中删除。例如,运行 info 命令,会报告 Pending Messages" "Pending Message Size" ,但此时的显示数据是不准的,因为此时的统计,只包含在运行 info 命令之前所有扫描到的数据,并不是所有的数据。同样的, show store 命令会显示 "Message Count" "Message Size" 的数据,而这个数据,也许是要比实际的保存在 store 中的消息量 。直到扫描完整的执行,上面的统计数量才是准确的,此时执行 show store 命令时,返回的结果中有一项 "First scan finished" ,当这一项的值为 true 是,所得的统计数据才是准确的。如果我们想尽快的得到准确的统计数据,可以将 scan_target_interval. 参数的值降低,而这又会影响性能。矛盾吧。

总之, mstores 的方式,本人不建议使用。

TIBCO Enterprise Message Service 是一个消息服务器产品,它采用C语言编写,完全支持JMS的通讯协议,在运行速度和消息吞吐量上表现非常出色,对于Windows、Linux、Mac、AIX平台都提供支持,关于这个产品,我也是刚刚接触不久,以下是本人一段时间使用的一个小结:1、将 EMS 设置为控制访问模式      默认安装好的 EMS 对于消息队列(Queue) 或者消息主题 1.show connections type=q 相关属性说明。 tcp://localhost:7222> show connections type=q L ID FSXT S Host User ClientID Sess Uptime C 2 ---A + gl-huang admin 1 0:04:55 J 7 ---Q + gl-huang anonymous 1 0:03:1... 面向消息的中间件随着系统变大变复杂,一个大的系统,开始向着领域模型和微服务架构演进。而各个子系统之间的通信开始变得复杂、重要。不过总的来说还是分两类:同步通信和异步通信。对于同步通信,现在通俗的做法有REST、RPC、SOAP等。对于异步,现在用的最多就是面向消息的中间件( Message Oriented Middleware,MOM)。我们知道异步通信一般有两个问题,一是发送方进程与消息服务端进... 我们公司的SECS/GSM通讯软件是单独一套的CS结构系统,在系统里结合了许多其它系统的业务逻辑和卡控,使得RMS系统越来越来臃肿,所以能否将公司的RMS系统打造成EAP,让整个系统的结构清晰,各个系统的职责分明,不想什么逻辑都加在RMS系统里。 提示:以下是本篇文章正文内容,下面案例可供参考 一、EAP是什么? EAP(Equipment Automation Programming)控制半导体设备进行自动化生产 教程:使用 TIBCO EMS 消息描述符06/08/2017本文内容概述本教程演示如何使用 BizTalk Server 上下文属性在您的业务流程中设置 TIBCO Enterprise Message Service ( EMS ) 消息描述符字段。 本教程假定你具有一个业务流程从接收端口接收消息并将消息发送到 TIBCO Enterprise Message Service 的绑定到的 Micr... TIBCO Enterprise Message Service功能介绍 Java Message Service 1.1(JMS)是用来定义应用之间消息传递的Java框架规范。Sun公司与 TIBCO 公司等多家公司合作开发了这个规范,用来定义企业应用之间统一的消息传递接口。 消息传递服务用来集成企业内部的应用。例如,您可能拥有多个应用系统:一个是客户关系管理、一个是产品库存管理,另外一个是生产物料...