是否可以指定消息的处理时间,如果超出,则抛出TIMEOUT异常?我尝试设置事务超时,但这没有用。时间过去了,没有异常被抛出。甚至没有调用DefaultTransactionDefinition.getTimeout()方法(在调试器中有一个断点)。使用正确的值调用DefaultTransactionDefinition.setTimeout(int)。
这是我的设置:
<int-jms:message-driven-channel-adapter id="x"
channel="incoming"
container="my"
error-channel="errors"/>
Container&#34; my&#34;扩展DefaultMessageListenerContainer,这就是我所拥有的:
@Override
@Autowired
@Value("5")
public void setTransactionTimeout(final int transactionTimeoutInSec)
{
super.setTransactionTimeout(transactionTimeoutInSec);
}
还有其他方法吗?谢谢!
答案 0 :(得分:0)
我想知道你是否可以为至少原始java而不是Spring Integration做类似的事情。我的意思是我不知道任何限制方法调用持续时间的方法。当然,我们可以通过异步调用以及一些线程障碍以某种方式来执行此操作以等待并中断所需的异常。至少这是timeout
对<gateway>
起作用的方式。但那个是请求回复。在你的情况下,它是单向流动。
虽然您可以考虑使用我建议的异步切换的一些AOP建议,并等待每条消息等待CountDownLatch
,并将等待时间限制为所需的timeout
。
另一方面,有<barrier>
之类的开箱即用组件,它可以帮助你:
<recipient-list-router>
与第一个ExecutorChannel
收件人一起向目标服务发送消息DirectChannel
的第二个收件人应为<barrier>
,以阻止所需timeout
的主线索或效果良好。trigger
BarrierHandler
正确释放主线程。require-reply
配置为true
。在这种情况下,抛出ReplyRequiredException
。你应该以某种方式捕捉(例如error-channel
的处理程序并将其包装到所需的TimeoutException
)correlation-strategy
来。但是......请确保它不是您系统的开销,让我们试着了解您是否真的需要担心处理超时。