消息队列中的消息是并行执行的,那如果消息之间有顺序依赖怎么办

先有一个MQ系统,然后再利用这个MQ写一个WORKFLOW系统。
Workflow Patterns Home Page

 

在MQ层面支持消息的顺序处理开销太大,为了极少量的需求,增加整体上的复杂度得不偿失。所以,还是在应用层面处理比较好。

如果queue只有单一worker,且能通过发布端控制或者通过MQ本身的routing机制将相同组的消息发到同一个queue,那就相对比较简单。

如果queue有多个worker,那恐怕只能通过在worker端通过共享的临时存储确保同一组的消息按顺序处理了,上一个消息没处理完,如果worker收到后面的消息的话先不处理,稍后重发到queue上,直到按顺序一个个处理完或者等到消息过期。


 

转载于:https://www.cnblogs.com/qingchun-com/p/8433295.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Java 编程消息队列通常被用于以下几个方面: 1. 异步处理:消息队列可以将任务异步化,即生产者可以将任务放到消息队列,消费者可以从消息队列获取任务并执行,从而降低任务执行的耦合度,提高系统的并发能力和稳定性。 2. 应用解耦:消息队列可以将应用程序之间的耦合度降到最低,因为它们只需要了解如何发送和接收消息即可。例如,一个系统可以将任务发布到消息队列,而其他系统可以通过订阅该消息队列来接收和处理这些任务,从而实现应用之间的解耦。 3. 流量控制:使用消息队列可以对系统的流量进行控制,因为消息队列充当了缓冲区。当系统出现高峰期时,消息队列可以缓存请求,以便消费者能够以更快的速度处理它们。 4. 消息传递:消息队列还可以用于在分布式系统传递消息。由于分布式系统的组件通常是分散在多个节点上的,因此使用消息队列可以在这些节点之间进行消息传递,从而实现系统的协调和管理。 ### 回答2: Java 编程消息队列的作用有以下几个方面: 1. 解耦应用组件:消息队列可以将不同组件或服务之间依赖关系解耦,使得系统更加灵活和可扩展。通过消息队列消息的生产者和消费者之间不需要直接进行通信,只需要将消息发送到队列,然后由消费者从队列获取消息进行处理。这样一来,即使某个组件暂时不可用或发生故障,也不会影响整个系统的正常运行。 2. 异步通信:消息队列支持异步通信模式,可以提高系统的性能和吞吐量。当需要对某个任务进行处理时,生产者只需要将消息发送到队列,而无需等待消费者的响应结果。这样可以实现任务的并行处理,提高系统的响应速度和处理能力。 3. 缓冲和削峰:消息队列可以作为一个缓冲区,用于平衡生产者和消费者之间的数据流量差异。当生产者的产生速度大于消费者的处理速度时,可以将消息暂存到队列,避免数据丢失或系统崩溃。同时,消息队列的削峰功能可以在系统负载达到峰值时,通过限制消费者的读取速度,保证系统的稳定性和可用性。 4. 系统解耦和扩展性:通过消息队列,不同的组件或服务可以通过消息的传递进行解耦,从而实现系统的松耦合。当系统需要进行扩展时,新增的组件或服务只需要与消息队列进行交互,而不需要直接修改已有组件的代码。这样可以减少系统改动的范围,降低开发和维护的成本。 总的来说,消息队列在Java编程扮演了重要的角色。它可以帮助应用程序实现异步通信、解耦应用组件、提高系统性能和扩展性,并且可以充当缓冲和削峰的作用,保证系统的稳定性和可用性。 ### 回答3: Java编程消息队列的作用主要有以下几点: 1. 解耦:消息队列可以将不同的组件或模块解耦,使其相互之间不直接依赖。一个组件可以将消息发送消息队列,而不需要直接调用其他组件的方法或接口,从而降低各个组件之间的耦合度。 2. 异步处理:消息队列可以实现异步处理,发送消息的组件可以继续执行其他任务,而无需等待接收消息组件的处理结果。这样可以提高整个系统的并发处理能力和响应速度。 3. 可靠性:消息队列具备持久化特性,消息发送到队列后将在队列保存一段时间,即使消费者暂时不可用,也不会丢失消息消息队列还可以通过备份和冗余机制,提供高可靠性的消息传递和存储能力。 4. 流量控制和削峰填谷:在高并发或突发流量情况下,消息队列可以通过设定合理的阈值和消费速率,进行流量控制,以避免大量请求直接压到后端系统。这样可以平滑处理高峰期的请求,提高系统的稳定性和可用性。 5. 消息分发和负载均衡:消息队列可以将消息分发给多个消费者,实现负载均衡和任务分配。这样可以更好地利用系统资源,提高整体的处理能力和效率。 6. 顺序保证:有些应用场景消息的处理顺序很重要。消息队列可以保证按照发送消息顺序进行消费,确保业务逻辑的正确性。 7. 数据缓冲:消息队列可以作为数据的缓冲区,用于平衡生产者和消费者之间的速率差异。这对于流量峰值过大或者瞬间请求量过大的场景下,可以缓解数据库压力,提高系统的处理能力。 总结起来,Java编程消息队列的作用主要有解耦、异步处理、可靠性、流量控制、负载均衡、顺序保证和数据缓冲。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值