I think you mix a few things: MQTT is an application layer protocol and uses TCP as a transport protocol. MQTT can also be used with Websockets as a transport. MQTT is, if you will, an easy alternative to JMS and AMQP.
AMQP is a popular and reliable alternative to JMS and is well suited for business and mission critical communications. It is very rich and widely used. Note that AMQP is a messaging protocol, and JMS is an API (which can even use AMQP as a transport). You can use AMQP directly in Java applications with libraries, for example RabbitMQ Java Client .
MQTT, on the other hand, is ideal for telemetry data and scenarios where you have many clients who communicate with one message broker, as well as low bandwidth usage, memory savings and battery life on clients.
JMS does not define any transport protocol (unlike MQTT), and here everything can be used. I personally think that TCP is also suitable here.
I do not know about OpenMQ, but for JMS and AMQP I can recommend ActiveMQ . There are several brokers in MQTT, including HiveMQ and Mosquitto .
Required Disclaimer: I'm a HiveMQ developer, so I'm probably a little biased; -)
source share