extracted pubsub into separate queue interface and split all provided implementations into two