Java 通过JMS对任务进行排队
我想向comunity提出一个问题,并就我一直在思考的策略获得尽可能多的反馈,旨在解决项目中的一些性能问题 背景: 我们有一个重要的流程,执行4个步骤Java 通过JMS对任务进行排队,java,jms,message-queue,spring-jms,weblogic11g,Java,Jms,Message Queue,Spring Jms,Weblogic11g,我想向comunity提出一个问题,并就我一直在思考的策略获得尽可能多的反馈,旨在解决项目中的一些性能问题 背景: 我们有一个重要的流程,执行4个步骤 实体状态更改及其持久性 如果1结束,则可以。实体将导出到CSV文件中 如果2结束,则可以。实体将导出到另一个CSV中。这一个有更多的信息 如果3结束就可以了。最后一个CSV通过邮件发送 步骤1和步骤2是相互关联的,它们是至关重要的 步骤3和4并不重要。甚至不在乎他们是否成功结束 1-2的表现还不错,但在某些escenarios中3-4的速度实在太
提前谢谢你,请原谅我的英语。我保证继续努力:-) < P>一个要考虑的问题是数据完整性。如果步骤n失败,是否需要反转步骤n-1?您是否需要了解任何排序依赖关系?您是向相同的CSV还是不同的CSV写信?如果相同,则可能存在争用问题 现在,回到原来的问题。我将考虑java执行器,使用4个固定大小的池,并将任务通过池迁移成功:
在这里,从服务器宕机中恢复的能力是关键,但Executors/ExecutorService没有持久性,因此我肯定会考虑JMS(然后我会将所有内容排队,甚至是前两步),但根据您的使用情况,这可能会有点过头。是的,一种事件驱动的方法,其中消息总线使集成听起来不错。它们是异步的,因此您不会有超时。当然,您需要使用一个主题。当服务器中的邮件太多时,WLS会出现一些内存问题,可能另一台服务器可以更好地分离关注点和资源。谢谢Scott。除了步骤2之外,不存在需要注意的完整性数据问题。如果步骤2结束OK表示CHNGES已正确存储,则可以使用最后2个步骤取消通知过程。我喜欢Java执行器的想法。这很像我对JMS的想法。链接队列。正如您所指出的,需要一组“看门狗”,检查每个队列/池中发生的情况,并向前或向后进行重试。我将检查我们是否真的需要持久化这些任务,或者它们是否可以在运行时执行。排队也带来了不便。就像队列服务器宕机一样。你的再次Scottnp,总的来说,假设限制不会影响年轻,这是一个相当好的方法!你指出了我们环境中的一个重要弱点。几个共享lib和webapps一起运行。我将试着测量我们需要多少记忆。