Jms ActiveMQ:处理速度慢的使用者
关于ActiveMQ:我有一个场景,其中我有一个生产者将小文件(大约10KB)发送给消费者。虽然这些文件很小,但消费者需要大约10秒钟来分析它们并将结果返回给制作人。我已经研究了很多,但我仍然无法找到以下问题的答案:Jms ActiveMQ:处理速度慢的使用者,jms,activemq,producer-consumer,broker,Jms,Activemq,Producer Consumer,Broker,关于ActiveMQ:我有一个场景,其中我有一个生产者将小文件(大约10KB)发送给消费者。虽然这些文件很小,但消费者需要大约10秒钟来分析它们并将结果返回给制作人。我已经研究了很多,但我仍然无法找到以下问题的答案: 如何使代理将文件(完全)存储在队列中 我应该使用ObjectMessage(因为文件很小)还是blob消息 由于使用者处理速度较慢,我应该降低其预取限制还是使用循环调度策略?哪一个更好 最后,在ActiveMQ常见问题解答中,我读到了这样的内容:“如果一个消费者收到一条消息,并且在
不确定其他人,但这里有一些想法 第一:我不知道你真正关心的是什么。ActiveMQ在数据存储中存储消息;所有数据不需要驻留在内存中的任何单个位置(代理或客户端)。所以你应该在这方面做得很好;早期版本确实要求所有ID都必须装入内存(不确定是否解决了这个问题),但即使是内存使用率也足够低,除非您有数以千万计的队列消息 至于ObjectMessage与blob;原始字节数组(blob)应该是最紧凑的表示形式,但由于所有这些都是为了存储而序列化的,所以它只会影响客户端上的内存使用。预取主要有助于降低访问延迟;但考虑到它们的处理速度很慢,您可能不需要任何预取;所以是的,要么将其设置为1或2,要么完全禁用 至于保证:分布式消息队列能够保证的最好保证是至少一次(有可能重复),或者最多一次(没有重复,可能会丢失消息)。通常最好至少进行一次,并让客户端使用客户端提供的ID进行重复数据消除。如何发送确认由JMS规范定义,因此您可以阅读更多关于JMS的信息;这不是特定于ActiveMQ的。
是的,您应该将超时设置得足够高,以便工作人员通常能够完成工作,包括所有网络延迟。这可能会减慢已删除邮件的重新传输速度(如果工作已结束),但这对您来说可能不是问题。非常感谢您的快速回复!实际上,我读到的一些关于JMS的内容(例如-)没有提到,或者与我读到的关于ActiveMQ的内容相矛盾。例如,在那篇文章中,它说消息存储在队列中(因此生产者不必在消费者消费消息时处于活动状态),这是我在activeMQ网站上找不到的。另外,它还说在队列模型(我所说的模型)中,只有一个消费者获得消息(正如您所说,ActiveMQ不保证这一点)。但它确实存储消息,因为这是消息队列(异步操作)的全部要点。有些模式没有完全的持久性,只是将它们保留在代理的内存队列中,但这是您必须配置的。