与http请求相比,火与忘

时间:2010-03-28 05:20:54

标签: java spring jms xmpp activemq

我正在寻找大家的意见。我有一个Web应用程序需要将数据记录到另一个Web应用程序数据库中。由于延迟问题,我不喜欢在第二个应用程序上使用HTTP请求GET。我正在寻找快速方法来快速保存第二个应用程序的记录,我遇到了“火与忘记”的想法,JMS是否适合这种情况?从我的理解JMS将保证消息传递,保证消息是否100%传递并不重要,只要能尽可能多地提供请求。如果我使用JMS,我需要将每秒至少1000个随机请求调用到第二个应用程序? HTTP请求?或者是XMPP?

4 个答案:

答案 0 :(得分:2)

我认为你总体上误解了网络。毫无疑问,HTTP GET必须比其他任何东西慢,如果HTTP利用了保持活力,那么大多数选项都会更快。

JMX不是协议,它是一个包含许多其他协议的规范,包括可能的HTTP或XMPP。

最后,在Java运行的级别,有UDP或TCP。通过保证传递(通过重传)和排序,TCP具有更多的开销。 UDP既不提供保证交付也不提供按顺序交付。如果你可以处理UDP的限制,你会发现它“更快”,如果你不能,那么任何轻量级TCP包装器(其中HTTP是一个)都差不多。

答案 1 :(得分:2)

您的要求似乎是:

  • 一个客户端和一个服务器(从您的第一句推断出来),
  • HTTP是强制性的(从您谈论 Web应用程序数据库时推断),
  • 每秒1000次或更多记录更新,
  • 不需要同步确认个人更新(您愿意使用“即发即弃”方法。

我接近这个的方法是让客户端线程在内部对更新进行排队,并实现一个客户端线程,该线程定期将排队的更新组装成一个HTTP请求并将其发送到服务器。如有必要,服务器可以发送指示单个更新状态的响应。

批处理消除了延迟对客户端的影响,并可能使服务器更有效地处理更新。

答案 2 :(得分:1)

HTTP和JMS或XMPP之间的最大区别在于JMS和XMPP允许异步触发并忘记消息传递(客户端并不真正知道消息何时以及是否将到达其目的地而不是期待来自接收者的回复或确认。这将允许第一个应用程序快速响应,而不管第二个应用程序处理时间。

异步消息传递通常是高容量分布式消息传递的首选,消息使用者比生产者慢。我不能说这是不是你的情况。

答案 3 :(得分:0)

如果您具有完全控制权并且两个Web应用程序在同一个Web容器中运行,因此在同一个JVM中,我建议使用JNDI允许两个Web应用程序访问公共数据结构(列表?)允许并发修改,即允许应用程序A添加新条目和应用程序B以同时使用最旧的条目。

这很可能是最快的方式。

请注意,您应该将列表中的信息保存到JRE中的类中,否则很可能会遇到类强制转换异常。这些可以被规避,但最容易的只是在公共数据结构中传输字符串。