java - 多线程 JMS 应用程序

标签 java jms

我正在处理多线程 JMS 接收器和发布器代码。 从队列接收 XML 消息,调用存储过程(执行需要 70 秒)并在 90 秒内将响应发送到主题。 我需要处理经纪人停机时的情况。 即从 Queue 接收消息并在 java 中处理消息的情况,同时 Queue 和 Topic 都将关闭。那么如何处理那些不在队列中且不发送到主题但在java内存中的消息? 可用的不同选项:

1.使用CLIENT_ACKNOWLEDGE 2.将发布者代码与接收者代码分开。 3.具有错误实用程序,该实用程序将从日志中获取消息并处理它们并发送到主题(最不喜欢)

请给我建议正确的选择

最佳答案

使用事务 session 。在单个工作单元下使用消息并发送响应,并在发送响应后显式调用 COMMIT。然后,如果代理在事务未完成时死亡,则输入消息将被回滚。如果您将数据库更新包含在两阶段协调事务中,那么它也可以在代理关闭时回滚。这要求消费者和响应者在同一个线程中,因为 JMS 按线程确定 session 范围,但您可以让多个线程并行运行 session 。

请注意,将许多交易保持打开状态 90 秒可能需要在代理端进行一些调整。

关于java - 多线程 JMS 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3768063/

相关文章:

java - 为什么当我改变屏幕方向时出现 ClassNotFoundException?

java - 在 Java 中构建 Map 的正确方法?

couchdb - 消息总线+事件存储+PubSub

java - 消息传递基础设施如何将主题映射到 PUB/SUB 的 IPC/TCP 层?

java - 在java中使用线程不安全的java.sql.Connection对象有什么可能性?

java - Java 正则表达式中的 Pattern.UNIX_LINES

java - 编译时出现不兼容类型问题 - void to MimeMessage

jms - Apache Camel : consuming a file after a direct

java - Open MQ 异常现象 : unexpectedly messages start to get stuck in the JMS Queue for a while before delivering them to the MDB

java - 远程 JMS 队列的客户端