Java 在JMS消息驱动Bean中重试
我有一个消息驱动bean,它使用消息并通过restapi将其发送到其他地方。像这样:Java 在JMS消息驱动Bean中重试,java,jakarta-ee,jms,Java,Jakarta Ee,Jms,我有一个消息驱动bean,它使用消息并通过restapi将其发送到其他地方。像这样: @MessageDriven(name = "n", activationConfig = {...}) public class SubmitMessageBean implements MessageListener { @Resource private MessageDrivenContext context; @Override public void onMess
@MessageDriven(name = "n", activationConfig = {...})
public class SubmitMessageBean implements MessageListener {
@Resource
private MessageDrivenContext context;
@Override
public void onMessage(final Message message) {
try {
// Submit data to somewhere with REST API
} catch (IOException ex) {
this.context.getRollbackOnly();
} catch (JMSException ex) {
e.printStackTrace();
}
}
}
当发生错误时,我想在一分钟内重试发送。有没有办法做到这一点?好吧,我想出来了。您还可以轻松地添加延迟,让远程系统有更多的时间来解决错误
@MessageDriven(name = "n", activationConfig = {...})
public class SubmitMessageBean implements MessageListener {
@Inject
JMSContext context;
@Resource(mappedName = "...")
Queue queue;
@Override
public void onMessage(Message message) {
Integer retry = 0;
try {
// track how many time we tried before
retry = message.getIntProperty("retry");
// Submit data to somewhere with REST API
} catch (IOException ex) {
// Put it back in queue again
// You can limit number of retry by keeping retry variable
if (retry < 5) {
JMSProducer producer = this.context.createProducer();
producer.setProperty("retry", r);
// Add some delay to start it again after a minute
producer.setDeliveryDelay(60000);
// Send it again with send()
}
} catch (JMSException ex) {
e.printStackTrace();
}
}
}
@MessageDriven(name=“n”,activationConfig={…})
公共类SubmitMessageBean实现MessageListener{
@注入
JMSContext上下文;
@资源(mappedName=“…”)
排队;
@凌驾
消息(消息消息)上的公共无效{
整数重试=0;
试一试{
//追踪我们以前试过多少次
重试=message.getIntProperty(“重试”);
//使用RESTAPI将数据提交到某处
}捕获(IOEX异常){
//再把它放回队列
//您可以通过保留retry变量来限制重试次数
如果(重试<5次){
JMSProducer producer=this.context.createProducer();
producer.setProperty(“重试”,r);
//添加一些延迟,一分钟后再次启动
生产商设置交货延迟(60000);
//使用Send()再次发送
}
}捕获(JMEX){
e、 printStackTrace();
}
}
}
当然,您需要用自己正确的值填充{…}