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

2022-09-04 03:23:35

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

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

我的问题是:队列是每个主要处理组件的必经之路吗?最佳实践是否要求将它们放在通常受到大量请求攻击的系统组件之前?是否存在不应使用队列的情况?

感谢您在这里的任何见解!


答案 1

下面是消息队列可能有用的一些示例。

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

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

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

这里的关键概念是负载节流、松散耦合、可靠性和异步操作。

至于它们是否是每个主要组件的必经之路,我会说不,这不是一个自动选择,你必须单独考虑每个组件。


答案 2

队列确实是一个非常强大和有用的工具,但像每个工具一样,你应该只使用它来完成它想要的工作。

IMO他们不是每个主要加工组件的客场。

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

如果允许异步处理,并且您希望调节到服务的流量,那么队列可能是要走的路。

看到@Qwerky的答案,他(或她)提出了一些很好的观点。


推荐