Re: ArtemisMQ for custom events between CorDapps
CordaService is a bit of a backdoor. It gives you an unsandboxed thread inside the Corda JVM and says "go party with it". This is totally unsupportable API-wise but very convenient, so the more ambitious you get with it the more you expose yourself to upgrade risk later. We are creatively ambiguous about what exactly you can do with this powerful tool for that reason. Watch out for accidentally using internal APIs!
Generally it's safer and more upgradeable to use RPC to control the node, rather than embed code right inside it.
Now for the thing you're trying to do, we're planning some work to allow flows to send and receive on arbitrary internal message queues via Artemis. The first chunk is coming in Corda Enterprise 4 which supports an external Artemis broker, and thus one you can configure and manage explicitly (OS still uses an internal broker). The next chunk is to figure out a way to expose queues as communicable things in the API, in ways that aren't Artemis specific and which aren't totally useless in the OS node too. For instance, maybe some notion of "routable endpoint" can be defined as a new subclass of AbstractParty.
This will then allow you to integrate with other internal services either
1. By telling Artemis to bridge to another MQ broker of a different brand, see https://activemq.apache.org/artemis/docs/latest/jms-bridge.html
2. By pointing those internal services to the Artemis you use for the node.
e.g. if you want your flows to send emails you could use a generic program that pops objects off a pre-configured queue and sends them via SMTP.