// Push message to the queue. // Pushing message automatically enables auto expiration. func (pq *PQueue) Push(params []string) iface.IResponse { var err *common.ErrorResponse var msgId string var priority int64 = pq.config.MaxPriority - 1 var payload string = "" for len(params) > 0 { switch params[0] { case PRM_ID: params, msgId, err = common.ParseStringParam(params, 1, 128) case PRM_PRIORITY: params, priority, err = common.ParseInt64Params(params, 0, pq.config.MaxPriority-1) case PRM_PAYLOAD: params, payload, err = common.ParseStringParam(params, 1, 512*1024) default: return makeUnknownParamResponse(params[0]) } if err != nil { return err } } if len(msgId) == 0 { msgId = common.GenRandMsgId() } pq.config.LastPushTs = common.Uts() pq.lock.Lock() defer pq.lock.Unlock() pq.msgSerialNumber += 1 msg := NewPQMessage(msgId, priority, pq.msgSerialNumber) return pq.storeMessage(msg, payload) }
// Set a user defined message lock timeout. Only locked message timeout can be set. func (pq *PQueue) SetLockTimeout(params []string) iface.IResponse { var err *common.ErrorResponse var msgId string var lockTimeout int64 = -1 for len(params) > 0 { switch params[0] { case PRM_ID: params, msgId, err = common.ParseStringParam(params, 1, 128) case PRM_LOCK_TIMEOUT: params, lockTimeout, err = common.ParseInt64Params(params, 0, 24*1000*3600) default: return makeUnknownParamResponse(params[0]) } if err != nil { return err } } if len(msgId) == 0 { return common.ERR_MSG_ID_NOT_DEFINED } if lockTimeout < 0 { return common.ERR_MSG_TIMEOUT_NOT_DEFINED } pq.lock.Lock() defer pq.lock.Unlock() msg, err := pq.unflightMessage(msgId) if err != nil { return err } msg.UnlockTs = common.Uts() + int64(lockTimeout) pq.inFlightHeap.PushItem(msgId, msg.UnlockTs) pq.database.StoreItem(pq.serviceId, msg) return common.OK_RESPONSE }
func getMessageIdOnly(params []string) (string, *common.ErrorResponse) { var err *common.ErrorResponse var msgId string for len(params) > 0 { switch params[0] { case PRM_ID: params, msgId, err = common.ParseStringParam(params, 1, 128) default: return "", makeUnknownParamResponse(params[0]) } if err != nil { return "", err } } if len(msgId) == 0 { return "", common.ERR_MSG_ID_NOT_DEFINED } return msgId, nil }