2016年7月20日星期三

ActiveMQ_039:TimeStampPlugin Interceptors

环境:MAC OS X 10.11.5 + ActiveMQ 5.13.3

当客户端的时钟不正确时,TimeStampPlugin 可以把消息的时间戳以 Broker所在机器的时钟为准。
注意,当使用 TimeStampPlugin 后,生产者发送消息时看到的消息时间戳将和消费者收到消息时看到的时间戳不一致。
配置如下:

<plugins>

  <!-- lets enable detailed logging in the broker but ignore ConnectionEvents -->
  <loggingBrokerPlugin logAll="true" logConnectionEvents="false"/>
  <timeStampingBrokerPlugin ttlCeiling="2000" zeroExpirationOverride="3000" futureOnly="true"/>

</plugins>

或者以这种简洁的方式:

<plugins>
  <timeStampingBrokerPlugin/>
</plugins>

参数说明:
(1)zeroExpirationOverride 默认值 0
当值非 0 时,配置的值会把所有没有配置过期时间的消息设置为过期时间。
(2)ttlCeiling 默认值 0
当值非 0 时,其值为最大的过期时间,即zeroExpirationOverride值最大不能超过此值。
(3)futureOnly  默认值 false
如果为 true,将不会把消息的时间戳和过期时间更新为一个比原始值还低的一个值。
如果为 false,会更新。

注意,如果消费者的时钟比 Broker 的时钟快,消费者可能认为消息已经过期,因此不会消费消息。
这时需要设置 futureOnly=”true”。

参考文献:
1. http://activemq.apache.org/timestampplugin.html
2. http://tmielke.blogspot.com/2011/01/sync-your-machine-clocks.html

没有评论: