[#3] publish job using callbacks