我可以在单个JMS事务的上下文中接收消息,准备其响应并发送消息吗?

时间:2016-01-10 12:12:38

标签: java transactions jms

参加考试我刚发现一个在网上查看后无法回答的问题。问题是:

“服务器是否可以使用JMS消息接收请求,准备其响应(例如访问数据库)并再次使用JMS发送回复,我是单个JMS事务的范围?”

我知道我们可以在交易的上下文中发送交易消息或接收消息。我知道我们可以在一个事务中对几个消息发送和接收进行分组,以保护整个交互。但是,JMS设计为异步。所以理论上我需要有一个事务将消息发送到队列,一个事务从队列接收消息。我是对的还是可以为发送和接收进行单一交易?

1 个答案:

答案 0 :(得分:2)

是的,事务处理接收器可以在jMS中实现。它们是通过控制通信的确认模式来实现的:如果所有事务操作都成功,收到的消息将被确认给代理,但是失败的情况下不会发生,所以消息可以重新传递。

This article更详细地解释了这一点:

  

消息生成者和消息使用者都可以使用事务处理   会议。 [...]

     

使用消息使用者,事务会话控制消息   确认。消费者可以接收多条消息   CLIENT_ACKNOWLEDGE模式。当关联的交易是   提交后,JMS实现会确认收到的所有消息   在关联的交易中。如果事务中止,则为JMS   实现将消息返回到关联的队列或主题。