Need some instruction for retraction strategies. We have an application that receives messages about the status of various things in the system, and at the moment I am asserting these messages as facts. The rules are written against these messages. Various rules might be interested in various values in the message, and they all fire independently. The problem is that after all the existing rules that are interested in the message have fired, I want to retract the message. How do I ensure that all the interested rules have fired first??

At the moment, I am trying to use a salience value of -1 to make sure a simple "cleanup" rule fires last:

rule "cleanupMessage"
no-loop true
salience -1
        msg : MyMessage()

Does this sound like a reasonable solution? Is there a better one??