消息设计反模式与 Java 消息服务 API 解析
消息设计反模式
在消息处理系统中,常常会遇到各种问题,以下介绍两种常见的消息设计反模式。
消息优先级过度使用
在新订单队列中,可能存在 401 个待处理订单,且短时间内无法处理完。此时,在线客户正等待图书订单的响应。一种临时解决方案是使用消息优先级,为在线消息分配更高优先级,将其移至队列前端。然而,这种方法会导致另一个反模式——消息优先级过度使用。
例如,新图书订单来自在线渠道和批量渠道。使用消息优先级虽能让在线订单优先处理,但可能出现所有可处理高优先级消息的监听线程都被低优先级消息占用的情况,导致高优先级消息处理变慢。
假设批量订单因特殊验证和处理需 1 分钟,而在线订单仅需 200 毫秒。多数消息监听器会被批量订单占用,使在线订单仍需等待。此时,应将新订单队列拆分为在线新订单队列和批量新订单队列,为在线队列分配更多监听线程。
使用消息优先级时,需思考是否使用单独队列更合适,因为消息优先级常被用于掩盖更深层次的问题。
消息头误用
多数消息头属性由 JMS 提供程序设置,尽管 JMS API 向开发者暴露了设置方法,但这可能导致难以发现的错误,尤其是设置消息过期时间和优先级时。
消息过期时间设置错误示例 :
public class QBorrower {
...
private void sendLoanRequest(double salary, double loanAm
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



