【问题标题】:Using the JMS session from reading a message to create a new one使用 JMS 会话从读取消息中创建新消息
【发布时间】:2012-06-20 16:30:53
【问题描述】:

我有一个实现 SessionAwareMessageListener 的消息监听器(使用 ActiveMQ)。当调用 onMessage(Message,Session) 方法时,我会解析消息并将其处理传递给处理器,以及用于执行回滚/提交的会话。

我需要创建一条新消息,用于放置到外部队列中。我可以使用现有的会话来创建消息(我目前正在这样做),还是我实际上应该创建一个新的会话来创建它?我对 JMS 会话的具体工作方式有点模糊。

【问题讨论】:

    标签: java jms activemq


    【解决方案1】:

    会话共享一个连接,通常是一个 TCP 连接。不同的连接可以到不同的服务器或使用不同的 TCP 连接。

    会话是单线程的。这意味着您在会话中接收或发送的消息将按可预测的顺序排列。如果您在两个不同的会话上发送两条消息,它们可以按任何顺序到达。 (有时这更可取)

    在最简单的用例中,一个会话只有一个连接。

    【讨论】:

    • 如果,在我将新创建的消息放入新队列并提交当前会话之后(因为我已成功从队列中提取,处理消息,然后放置一个新的一个在新队列中),那么该新消息是否会保留在第二个队列中以供检索?如果我现在表现出我的无知,请道歉!
    • 我们目前正在接收一条消息,然后在出现问题时回滚会话 - 以便消息返回队列以便稍后重新处理 - 或者将其处理并放入新队列 (是那个 DLQ 或正确的结果队列)然后提交。这是错的吗?
    • 消息在被处理之前一直保留在队列中。只有该消息的侦听器才能做到这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多