【问题标题】:Smack reading old events阅读旧事件
【发布时间】:2010-09-21 20:15:00
【问题描述】:

我在使用 Smack 3.1 的应用程序和运行 openfire 的服务器时遇到问题。启动应用程序后,它将读取节点上的最后一条消息。这不起作用,因为消息被解析、处理并放入数据库中。除了在有效负载中发送消息创建时间之外,还有什么方法可以阻止这种重复? (实际上,如果有任何信号表明消息已“消费”,那就太好了)

【问题讨论】:

  • 你指的是什么类型的消息/节点?

标签: java openfire smack


【解决方案1】:

如果您指的是 pubsub,那么您可以配置节点,使其不使用 persist_itemsmax_items 保存项目。

如果您无法控制节点创建,那么您可以检查数据包中的延迟命名空间(jabber:x:delay 和/或urn:xmpp:delay

public void processPacket(Packet pkt) {
   DelayInformation delay = (DelayInformation)pkg.getExtension("x", "jabber:x:delay");
   if (delay != null)
      return; //Discard this packet
   delay = (DelayInformation)pkg.getExtension("x", "urn:xmpp:delay");
   if (delay != null)
      return; //Discard this as well
   //Otherwise this is a good packet
   ...
}

您还可以通过检查DelayInformation 对象来决定持续时间、原因等。

如果是 PEP,那么您将始终获得最后一个发布的项目,我认为无法确定它是否被延迟,即。数据包中没有延迟信息。

您需要获得 nightly buildsbuild your own 以获得 pubsub 支持。我认为当前版本的 Smack 3.1.0 不支持 pubsub。

【讨论】:

  • 当你说 pubsub 时,它引发了我的回忆,快速浏览 maven 依赖项表明我们正在使用 smackx-pubsub .4。我还在纠结,但你让我的世界更近了(如果这成功了,一个可以接受的答案)
猜你喜欢
  • 1970-01-01
  • 2010-11-02
  • 2014-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-11
  • 2015-02-04
  • 2020-02-21
相关资源
最近更新 更多