我建议生产者不能丢弃XML消息,直到客户端确认它已收到消息。仅仅确认它已被ActiveMQ服务器接收是不够的,因为消息在客户端收到它之前没有任何价值。
所以,为了达到这个目的,我会找到某种确认接受是一种很好的方法。简化的系统可能工作是这样的......
初始设置
首先,创建两个主题:“信息”和“邮件回执”。
接下来,将Producer设置为发布到'messages'主题,并订阅'message-receipts'主题。生产者还应该能够维护所有已发送消息的列表,但尚未确认。
此外,您的客户将订阅“消息”主题,并发布到“消息收据”主题。
发布消息
要发布的消息,生产者将首先生成一个XML消息,并给它一个唯一的ID可以识别的信息。然后它将在“消息”主题上发布它。
然后,客户端将在“消息”主题上看到消息。它必须转而发布一个'message-receipts'响应,它将包含收到的消息的ID。
最后,制片人会看到“邮件回执”消息,可以确认的消息已经被消息收据ID与列表进行比较送往尚未得到证实的消息。一旦确认,该消息将从“已发送但尚未验证”列表中删除。
处理未接收到的消息
生产者可以重新发送一条消息,如果已经发生了一段时间没有收据。