Jan*_*vee 8 java publish-subscribe spring-batch spring-jms point-to-point
我们的项目是使用每个的rest api集成两个应用程序,使用JMS(提供异步性质)和spring批处理从JMS队列读取批量数据并处理它,然后将其发布到接收应用程序.
我是JMS和春季批次的新手.我有几个基本问题要问:
PTP 与发布/订阅
\n\n使用消息队列的点对点方法是最标准的方法。特别是在批处理应用程序中,我看不出使用发布订阅的直接原因,因为它假定您有多个消费者使用相同的消息。
\n\n理论上,如果需要在相同的数据块上执行多个函数,您可以将不同的处理器组织为订阅者,以这种方式扩展应用程序,但这是非常高级的使用场景。
\n\n能否从JMS队列中批量读取消息:
\n\n这里的 JMS 规范仅讨论(可能是误读)消息的批量确认,但它没有对消息的批量传送提出要求。
\n\n\n\n\nCLIENT_ACKNOWLEDGE - 使用此选项,客户端通过调用 message\xe2\x80\x99s 确认方法来确认消息。确认已使用的消息会自动确认已收到其会话传送的所有消息。
\n
简单地说,关于批量交付的答案是“如果 JMS 提供商支持,那么可以,否则不”
\n\n大多数提供商允许批量确认消息
\n\n这是执行此操作的 Oracle 接口:
\n\npublic interface com.sun.messaging.jms.Message {\n void acknowledgeThisMessage() throws JMSException;\n void acknowledgeUpThroughThisMessage() throws JMSException;\n}\nRun Code Online (Sandbox Code Playgroud)\n\nCLIENT_ACKNOWLEDGE 的组合。+ 在 . message 将确认截至该时刻收到的所有消息。
\n\n手动确认消息:
\n\n这可以通过 CLIENT_ACKNOWLEDGE 和消息上的acknowledge 方法来实现。在这里,我将再次引用您的确认方法的javadoc,该方法也再次引用您的第二个问题,它讨论了在一定程度上对所有消息的批量确认。
\n\n\n\nvoid recognize()\n 抛出 JMSException 确认此已消费消息的会话的所有已消费消息。当客户端指定要显式确认其 JMS 会话的消费消息时,所有消费的 JMS 消息都支持使用确认方法。通过对已使用的消息调用确认,客户端会确认该消息传递到的会话所使用的所有消息。
\n\n对于事务会话和指定使用隐式确认模式的会话,确认调用都会被忽略。
\n\n客户端可以在使用每条消息时单独对其进行确认,也可以选择将消息作为应用程序定义的组进行确认(这是通过对组中最后接收到的消息调用确认来完成的,从而确认所有消息)会话消耗的消息。)
\n\n已收到但未确认的消息可能会被重新传送。
\n
| 归档时间: |
|
| 查看次数: |
2618 次 |
| 最近记录: |