0

我正在使用带有 EJB 3.1 架构的 Glassfish 3.1.1 和 smack 库来处理传入的 XMPP 数据包。

为此,我有一个从单例开始的线程,它处理我的传入数据包。

Packet packet = collector.nextResult();
if (packet != null)
  processPacket(packet); // here i lookup my processing EJB and start working

我需要的是一个队列,它将数据包排队,以便一次处理每个发送者一个数据包。目前我并行处理每个收到的数据包,这使我无法保持数据包的顺序。

有什么想法可以尽可能优雅地解决这个问题吗?

问候米

PS:第一种方法是存储当前正在处理数据包的客户端,然后我遍历收集的数据包并查找未处理任何内容的发送方。但是如果缓冲区中的任何数据包都不允许被处理,我担心这会花费很多迭代。

4

1 回答 1

0

如果您提前知道发送者,那么您可以注册一个匹配每个发送者的PacketFilter 。因此,每个收集器将对来自每个发送者的数据包进行排队。

如果您不知道,那么您可以完成同样的事情,但您必须自己路由消息。使用PacketListener代替收集器,并在收到每条消息时将它们路由到发送者队列中。如果队列尚不存在,您可以按需创建队列。

于 2012-04-19T20:09:45.410 回答