我遇到使用Smack 3.1和运行openfire的服务器的应用程序的问题。启动应用程序后,它将读取节点上的最后一条消息。这不起作用,因为消息被解析,处理并放入db。除了在有效载荷中发送消息创建时间外,还有什么方法可以阻止这种重复吗? (实际上,如果有信号表明消息已被“消费”,那将是非常棒的)
答案 0 :(得分:1)
如果您指的是pubsub,那么您可以配置节点,使其不会保留persist_items
和max_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 builds或build your own以获得pubsub支持。我不认为当前版本Smack 3.1.0是supoorts pubsub。