我有一个在 WebLogic 10.3.5 上运行的 Java EE 5 MDB 驱动的 JMS 系统,用于通过电子邮件/IM/SMS 发送通知。我需要指定一个发布公告的日期/时间窗口。
据我所知,没有选项可以在某个日期/时间传递/执行 JMS 消息。
我的公告列表在一个 DB 表中,所以目前我有一个 EJB 3.0 Timer Bean,它每 2 分钟轮询一次表,并将消息发送到 JMS 队列以获取该窗口中的新公告。
它可以工作,但我不喜欢 DB 表轮询是系统中的一个关键点,它不会像 JMS 部分那样根据需求进行扩展。我对表的状态列进行了分区,但即使这样,在两个日期执行 BETWEEN 也不会随着数据的增长而很好地扩展。
人们能否提出一个可扩展的解决方案,让我放弃表轮询,只在创建公告时创建 JMS 消息,将它们的执行推迟到指定的日期/时间?至关重要的是,延迟执行应该是持久的,在服务器重新启动后仍然存在,并在服务器重新启动时自动继续“等待”执行。