Message Queue(MQ), Message Bus(MB) and Message Broker are all middleware frameworks for app to app communication. These components are technology agnostic in a sense they don't care about how the application was implemented(Java, python, ruby etc). Different applications talk different languages and by nature cannot communicate with other application unless they perform the tedious task of translation themselves. Middleware components exist to take away this friction and lets applications talk with each other seamlessly
Differences Message Queue(MQ) Vs Message Bus(MB) Vs Message Broker
To understand the differences, we can club Message Queue(MQ) and Message Bus(MB) together and keep Message Broker separately. The reason being there is only a slight difference between MQ and MB.
Message Queue & Message Bus
These are essentially distributors of messages between applications. They receive messages in simple formats(text, xml, json) from publishers and allows valid subscribers to consume these messages. Because the components have persistency build inside them, it allows for guaranteed delivery in case of message loss. The Message Queue differs from Message Bus in that it ensures FIFO order when it stores messages locally. Order of delivery is maintained here. Message Bus simply does not care about the order of messages. For example, If you are travelling in a bus, the first person to enter the bus does not necessarily have to leave first. He might actually be travelling to the last destination. Similarly, in a Message Bus, you can write logic to send Messages with different priorities and order
Message Broker
We can say Message Broker is the bigger brother. While MQ and MB simply store messages and deliver to valid clients, Message Broker does the extra job of translating between systems and also sometimes encapsulates routing and business logic. You have a lot more control over app to app communication using Message broker. It also supports more input/output formats other than simple text/xml/json