我有一个java web应用程序,它使用某种形式的通过数据库表(EmailQueue)排队的自定义消息来排队传递电子邮件。该应用程序部署在Tomcat上,并使用Quartz作业轮询EmailQueue表中的新条目以发送。使用消息队列的Web应用程序的体系结构
我现在需要添加一些其他类型的作业和消息(通知,短信等)的排队,因此正在寻找使用适当的消息队列(RabbitMQ,ActiveMQ等)而不是数据库。这是因为一个数据库不应该被用作队列的问题上的一个fewarticles。
但是我还没有完全想到缠绕整个生态系统,所以希望得到一些指导。具体来说:
- 在Web应用程序的上下文中,消息队列代理通常是否像数据库一样运行自己的进程?我需要消息在服务器重启时保持持久性。
- 应该将消息队列使用者部署为Tomcat中的Servlet还是作为独立的Java应用程序?我特别感兴趣的是它的所有可管理性(即启动/停止实例,配置,监控)。相关的和email thread。
您可以拥有一个嵌入式队列--Spring提供了一个嵌入式的简单代理。但正如你指出的那样,将代理与Web服务器的生命周期联系起来,或者更糟糕的是,应用程序本身。外部代理更常见 - 可能运行在同一台服务器上。就处理程序而言,你可以将它们放在任何地方;您是否希望他们在应用程序停机期间继续处理/排队消息?简单地把它们作为服务器上的守护进程服务。但[请注意这个反模式](http://sensatic.net/messaging/messaging-anti-patterns-part-1.html)。 –
它似乎确实运行经纪人作为一个单独的过程确实更合适。我会阅读该文章并浏览ActiceMQ in Action以获取更多见解。与Tomcat servlet相比,我担心监视和管理服务器上的守护进程服务。可能有解决方案,但我不知道它们。 – bernie