When it comes down to it all modern day applications have some sort of MQ implementation. Whether it’s obvious as in some commercial or free implementation (MSMQ, Rabbit-MQ, ZeroMQ, IronMQ) they are the same… obvious. Compared to the less obvious MQs that are embedded in some library or 3rd party dependency as is common in many database drivers as part of some database backed/integrated application.
MQs are similar to threading in their complexity. If not implemented correctly you can lose transactions, or your mind. SOA is in the family and looks a lot like the Micro-Kernel. Distributed processing with work queues. And nearly impossible to debug.
The biggest challenge is knowing what code to write and what code to buy.