使用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