If I understand well, publish needs an @exchange which is not set until someone call 'topic'

So 
bus = MessageBus.new(...)
bus.connect
bus.publish will crash

whilst

bus = MessageBus.new(...)
bus.connect
bus.topic(???)
bus.publish will work, strange

I think topic should be private and either be called at init time, connect time and when needed when publishing