使用jms队列。jms消息停止启动后非持久性重新传送appServer
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...
}
}
如果应用服务器(似鲭水狼牙鱼)消息中退出消耗(的onMessage),则事务正确回滚。
当应用程序服务器再次启动时,即使设置了DeliveryMode.NON_PERSISTENT,也会重新传递消息。
我想避免消息重新传送。
是否有可能(以及如何)?
“当启动appServer同样的消息从消费者接收,但发件人不发送任何东西。” - 你能解释得更好吗?你如何从消费者那里收到 - 消费者不会发送消息而是收到消息。重启后是否收到相同的消息? – OndrejM