【发布时间】:2017-06-27 15:21:18
【问题描述】:
使用 jms 队列。
ejb 发件人:
@Resource(lookup = "jms/csPdvQueue")
private Queue csPdvQueue;
@Inject
private JMSContext jmsContext;
方法发送消息:
public void asynchWatched(Pdv pdv, boolean pending) {
jmsContext.createProducer().setDeliveryMode(DeliveryMode.NON_PERSISTENT);
jmsContext.createProducer().send(csPdvQueue, pdv);
}
ejb 消费者:
@MessageDriven(mappedName = "jms/csPdvQueue")
public class PdvProcessorMdb implements MessageListener {
@Override
public void onMessage(Message message) {
... execute some businesslogic...
}
}
如果应用服务器(payara)在消息消费(onMessage)期间退出,事务正确回滚。
当应用服务器再次启动时,即使我设置了 DeliveryMode.NON_PERSISTENT,消息也会重新传递。
我想避免消息重新传递。
有可能(以及如何)?
【问题讨论】:
-
"当启动 appServer 时,从消费者那里接收到相同的消息,但发送者没有发送任何东西。" - 你能解释得更好吗?您如何从消费者那里接收信息 - 消费者不发送消息而是接收消息。重启后是否收到相同的消息?
标签: jakarta-ee glassfish payara