add sync/async publish