Spring消息侦听器/手动确认
我知道这听起来像是听到了1000次,但我不这么认为 我真的找不到解决办法: 使用公共ejb,我可以使用确认模式来确认() 手动发送消息。如果我不这样做,它将被重新交付。是我干的 在过去,它运作良好 使用SpringJMS,我有一个问题,似乎我 仅当出现异常时,才能将重新交付设置为处理 不管是扔还是不扔 如何使用ejb实现它 我的问题是:如果消息被确认,我不想Spring消息侦听器/手动确认,spring,jms,message,mdp,Spring,Jms,Message,Mdp,我知道这听起来像是听到了1000次,但我不这么认为 我真的找不到解决办法: 使用公共ejb,我可以使用确认模式来确认() 手动发送消息。如果我不这样做,它将被重新交付。是我干的 在过去,它运作良好 使用SpringJMS,我有一个问题,似乎我 仅当出现异常时,才能将重新交付设置为处理 不管是扔还是不扔 如何使用ejb实现它 我的问题是:如果消息被确认,我不想 即使出现异常,它也需要重新交付。我们可以根据您的要求使用spring framework的DefaultMessageListenerCo
即使出现异常,它也需要重新交付。我们可以根据您的要求使用spring framework的DefaultMessageListenerContainer 请查找Spring的以下文档: 以类似于EJB世界中的消息驱动Bean(MDB)的方式, 消息驱动的POJO(MDP)充当JMS消息的接收器。这个 一个限制(但也请参见下文对 MDP上的MessageListenerAdapter类)是它必须实现 javax.jms.MessageListener接口。还请注意,在 如果POJO将在多个线程上接收消息, 确保实现是线程安全的非常重要 下面是我在方法上添加了acknowledge()方法的代码片段。 JMS侦听器类:
public class MyProjectJMSListener implements MessageListener {
public void onMessage(Message message) {
try {
message.acknowledge();
//Business logic to be added
}
catch (JMSException ex) {
throw new RuntimeException(ex);
}
}
}
spring jms config.xml
<bean id="messageListener" class="com.myproj.MyProjectJMSListener" />
<bean id="jmsContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name="connectionFactory" ref="connectionFactory"/> <!-- connectionFactory bean class to be added -->
<property name="destination" ref="my.jms.destination"/>
<property name="messageListener" ref="messageListener" />
</bean>
感谢您的回复。但是,我就是这样做的, 除了我使用Spring3和注释配置。问题 不是接收,而是确认。如果我使用事务 不管是否,消息似乎是自动确认的,而 接收 我试着直接用下面的方法。。 注意是有效的
public class JMSListener implements SessionAwareMessageListener<TextMessage> {
...
@Override
public void onMessage(TextMessage message, Session session) {
...
}
}
公共类JMSListener实现SessionAwareMessageListener{
...
@凌驾
公共消息无效(文本消息消息、会话){
...
}
}
这样我就可以看到会话设置。例如session.getAcknowledgeMode()
传递客户端确认和会话。getTransact()传递true
或错误取决于我设置的内容。但似乎没有效果。
不管怎样,这条信息似乎得到了承认
spring客户端的java文档中也存在差异
还有吉。对于spring,有这样一句话:
“客户端确认”:侦听器成功执行后自动确认消息;在引发异常的情况下不重新交付
对于jee,有这样一句话:
客户端确认使用此确认模式,客户端通过调用消息的确认方法来确认已使用的消息
对我来说这可能是原因?但如果真的是这样(我
难以置信)这会使spring无法处理消息?您找到解决方案了吗?