我目前正在研究使用 JMS(即 Spring 框架 JMS 和 Active MQ)在服务器和客户端之间发送有效负载消息的应用程序的带宽限制功能(不要问我为什么,这不是我的决定)。
我发现了很多限制传入 JMS 消息的方法(但没有一个基于实际带宽负载),但是我没有找到任何可能的方法来限制传出消息流。所以我决定写漏桶算法 http://en.wikipedia.org/wiki/Leaky_bucket靠我自己。
有什么方法可以获取JMS消息的大小吗?除了 Java 中的“sizeof”实现之外(在Java中,确定对象大小的最佳方法是什么? https://stackoverflow.com/questions/52353/in-java-what-is-the-best-way-to-determine-the-size-of-an-object)
我认为没有比测量其序列化大小更好的替代方法来确定 JMS 消息大小。
但如果您愿意,您可以添加一些优化。消息有多种类型(例如 MapMessage、ObjectMessage、TextMessage)。
文本消息的大小是其文本的长度。 Map消息的大小是其所有字段的总大小。这些字段是原语或java.util.Date,因此测量它们不是问题。
对象消息包含可序列化的对象,因此您可以通过写入ByteOutputStream来测量其大小。
我认为,如果您使用大多数 JMS 提供程序的隐藏功能来发送延迟消息,那么使用 JMS 实现漏桶可能会得到简化。您可以在将消息放入队列时对其进行测量,并决定希望订阅者何时接收它。
有关如何发送延迟消息的详细信息,请阅读此处:http://alexradzin.blogspot.com/2010/10/send-delayed-jms-messages.html http://alexradzin.blogspot.com/2010/10/send-delayed-jms-messages.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)