内存管理可以分别在各个目的地上配置,也可以在系统范围级别内(对于所有目的地)配置。
有关物理目的地限制的信息,请参见第 6 章,管理物理目的地。
如果消息生成方的数目超过消息使用方的数目,则消息可能在代理中堆积。代理包含限制生成方以及在内存很低的情况下将消息交换出活动内存的机制,但最好还是对代理可以保持的消息总数和消息字节总数进行严格限制。
可以通过设置 imq.system.max_count 和 imq.system.max_size 代理属性来控制这些限制。
例如:
imq.system.max_count=5000
上面定义的值表示代理最多只能保存 5000 条未传送/未确认的消息。如果发送了其他消息,它们将被代理拒绝。如果消息是持久性的,当生成方尝试发送该消息时,会收到一个异常。如果消息是非持久性的,代理将在不给出任何提示的情况下丢弃该消息。
如果在发送消息的过程中返回了异常,客户端应该暂停片刻,然后再次尝试发送。(请注意,异常绝不会是由于代理未能接收消息而引发的;所引发的异常都是由发送方客户端检测到的。)