java – 什么是JMS有好处?

我正在寻找(简单)问题的例子,JMS是一个很好的解决方案,以及为什么JMS是这些情况下的一个很好的解决方案的原因。在过去,我只是使用数据库作为传递消息从A到B的手段,当消息不一定由B立即处理。

这种系统的一个假设的例子是所有新注册的用户应在注册后24小时内发送欢迎电子邮件。为了参数的考虑,假设DB不记录每个用户注册的时间,而是每个新用户的引用(外键)存储在pending_email表中。电子邮件发件人作业每24小时运行一次,向此表中的所有用户发送电子邮件,然后删除所有pending_email记录。

这似乎是应该使用JMS的那种问题,但是我不清楚我对JMS描述的方法会有什么好处。 DB方法的一个优点是消息是持久的。我理解JMS消息队列也可以持久化,但在这种情况下,似乎在JMS和“数据库作为消息队列”方法之间没有什么区别?

我缺少什么?
– 唐

JMS和消息传递是真正的两个完全不同的事情。

>发布和订阅(向有兴趣的消费者发送消息 – 有点像发送电子邮件到邮件列表,发件人不需要知道谁订阅了
>高性能可靠的负载均衡(消息队列)

查看更多信息how a queue compares to a topic

您所讨论的情况是第二种情况,您可以使用数据库表来模拟消息队列。

主要区别是JMS消息队列是一种高性能高并发负载均衡器,设计用于大吞吐量;您可以在许多进程和线程中向许多并发消费者发送每秒数万条消息。这样做的原因是消息队列基本上是高度异步的 – 一个good JMS provider will stream messages ahead of time to each consumer,所以一旦消费者可用,就有几千个消息可以在RAM中处理。这导致大量吞吐量和非常低的延迟。

例如想象一下使用数据库表编写一个Web负载均衡器:)

当使用数据库表时,通常一个线程倾向于锁定整个表,因此当尝试实现高性能负载均衡器时,您的吞吐量往往非常低。

但是像大多数中间件一样,这取决于你需要什么;如果你有一个低吞吐量系统,每秒只有几条消息 – 随意使用数据库表作为队列。但是如果您需要低延迟和高吞吐量,那么强烈建议使用JMS队列。

http://stackoverflow.com/questions/222017/what-is-jms-good-for

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:java – 什么是JMS有好处?