何时,何地以及如何使用队列?

IAm*_*aja 14 java queue

我是企业Java开发的新手,虽然我确信这个问题同样适用于任何语言或平台,例如.NET.

我现在第一次处理消息队列,我对他们非常感兴趣.(具体来说,我们使用的是ActiveMQ).我的技术主管希望ActiveMQ队列成为我们所有数据库和内部Web服务的领跑者; 因此,不是从客户端发出数据库查询而是直接转到数据库,它首先排队.

我的问题是:排队等待每个主要处理组件的方式?最佳实践是否要求将它们放在通常会受到大量请求影响的系统组件之前?是否存在不应使用队列的情况?

感谢您的任何见解!

Qwe*_*rky 8

以下是一些消息队列可能有用的示例.

有限的资源
假设您有大量用户向服务发出请求.如果服务只能同时处理少量请求,那么您可以使用队列作为缓冲区.

服务解耦
关键的企业集成概念是在例如工作流程中解耦系统.它们不是让系统直接相互通信,而是异步地将消息发布到队列中.然后,集成组件将消息路由并传递到适当的系统.

消息重
放在上面的示例中,队列还可以提供可靠的请求传递和处理.如果工作流的一个组件中断,则其他组件不受影响,仍然可以操作并将消息发布到损坏的组件.当损坏的组件恢复时,它可以处理所有排队的消息.

这里的关键概念是负载限制,松散耦合,可靠性和异步操作.

至于它们是否适用于每个主要组件,我会说不,这不是一个自动选择,您必须单独考虑每个组件.


Jam*_* DW 5

队列确实是一个非常强大和有用的工具,但是像每个工具一样,你应该只将它用于它的工作.

IMO他们是不是客场去为每一个主要的处理组件.

作为一般规则,我将使用一个队列,其中请求资源不需要立即的同步响应.我不会使用队列,其中处理的及时性和顺序至关重要.

在允许异步处理并且您希望规范服务流量的情况下,可以采用队列的方式.

请参阅@ Qwerky的答案,他(或她)提出了一些好处.