我正在使用带有EJB 3.1体系结构的Glassfish 3.1.1和smack库来处理传入的XMPP数据包。
为此,我有一个从Singleton启动的线程,它处理我的传入数据包。
Packet packet = collector.nextResult();
if (packet != null)
processPacket(packet); // here i lookup my processing EJB and start working
我需要的是一个队列,它将数据包排队到每个发件人一次处理一个数据包。目前我并行处理每个收到的数据包,这使我无法保持数据包的顺序。
我有什么想法可以尽可能优雅地解决这个问题?
问候语
PS:第一种方法是存储当前正在处理数据包的客户端,并迭代收集的数据包并查找未处理任何内容的发送方。但是,如果不允许处理缓冲区中的任何数据包,那么我担心这会花费很多次迭代。
答案 0 :(得分:0)
如果您提前了解发件人,则可以注册与每位发件人匹配的PacketFilter。因此,每个收集器将排队来自每个发送者的数据包。
如果您不知道,那么您可以完成同样的事情,但您必须自己路由邮件。使用PacketListener而不是收集器,并在收到每条消息时将其发送到发送方队列。然后,您可以根据需要创建队列(如果它尚不存在)。