The heartbeat produce on the Minion side currently schedules the heartbeats using java.util.Timer#scheduleAtFixedRate. If ActiveMQ is unreachable, or sending to ActiveMQ otherwise blocks, then this method will play catch-up when connectivity is re-established, which results in many messages being sent in succession. This can be a large number of messages if the Minion has been disconnected for a while.
Since "older" messages can be ignored, we should simply use java.util.Timer#schedule instead.
Also, the heartbeat do not currently include a timestamp, so it is possible for the OpenNMS instance to consume "stale" heartbeats from the broker.