The StreamController is responsible for managing the connection to the RabbitMQ streaming server. There is only ONE streaming connection, independently of how many resources/consumers are added. Each consumer has its own queue, but the connection is shared among all the consumers. If the connection goes down, all the consumers get disconnected. There is no automatic re-connection. A connection is (re)-established when the first consumer is added. Once a connection is established the StreamSubscriber object is set to read from the connection for any up coming messages. The StreamSubscriber then passed this object to the IDispatch object whose task it to dispatch the messages to the correct consumer.