我将简短描述我们的系统基础架构和消息流:
有多个生产者将消息排入QUEUE
有一个异步侦听器(AUTO_ACKNOWLEDGE)收集消息并将它们放在列表中。
简化代码:
private List<Message> messages;
public void onMessage(Message message) {
messages.add(messages)
}
简化代码(来自听众):
public List<Message> retrieveAndClearMessages() {
synchronized (messages) {
List<Message> returnList = new ArrayList<Message>(messages);
messages.clear();
return returnList;
}
}
问题在于,轮询器的持续时间是内存 - 这意味着如果遇到中断,所有当前进程的消息都将丢失。是否有任何企业模式可以解决这些问题?也许是一些备份队列或其他解决方法。
答案 0 :(得分:0)
对我来说最好的解决方案是当轮询器唤醒时,它连接到QUEUE,收集和处理消息,如果你的消息被保留,那么就没有任何风险可以丢失它们。