不确定其他人,但这里有一些想法 .
第一:我不确定你的确切关注点是什么 . ActiveMQ确实将消息存储在数据存储中;所有数据都不需要驻留在任何一个地方(经纪人或客户端)的内存中 . 所以你应该在这方面做得很好;早期版本确实要求所有ID都需要适合内存(不确定是否已解决),但即使内存使用率足够低,除非您有数千万个队列内消息 .
至于ObjectMessage vs blob;原始字节数组(blob)应该是最紧凑的表示形式,但由于所有这些都被序列化以进行存储,因此它只影响客户端上的内存使用情况 . 预取主要有助于访问延迟;但鉴于它们处理起来很慢,你可能不需要任何预取;所以是的,要么将其设置为1或2,要么完全禁用 .
至于保证:分布式消息队列可以保证最好是至少一次(可能重复),或者至多一次(没有重复,可能丢失消息) . 通常最好至少进行一次,并使用客户提供的ID使客户端进行重复数据删除 . 如何发送确认是由JMS规范定义的,因此您可以阅读有关JMS的更多信息;这不是ActiveMQ特有的 . 是的,您应该将超时设置得足够高,以便工作人员通常可以完成工作,包括所有网络延迟 . 这可能会减慢已丢弃邮件的重新传输速度(如果已停止工作),但这对您来说可能不是问题 .