implement message queue