/** * Instantiate a message * * @param type {@link MessageType} as a string or a custom message type * @param msgId unique message identifier */ public Message(String type, MessageId msgId) { super(new ZNRecord(msgId.stringify())); _record.setSimpleField(Attributes.MSG_TYPE.toString(), type); setMessageId(msgId); setMsgState(MessageState.NEW); _record.setLongField(Attributes.CREATE_TIMESTAMP.toString(), new Date().getTime()); }
/** * Instantiate a message * * @param record a ZNRecord corresponding to a message */ public Message(ZNRecord record) { super(record); if (getMsgState() == null) { setMsgState(MessageState.NEW); } if (getCreateTimeStamp() == 0) { _record.setLongField(Attributes.CREATE_TIMESTAMP.toString(), new Date().getTime()); } }
/** * Create a reply based on an incoming message * * @param srcMessage the incoming message * @param instanceName the instance that is the source of the reply * @param taskResultMap the result of executing the incoming message * @return the reply Message */ public static Message createReplyMessage( Message srcMessage, String instanceName, Map<String, String> taskResultMap) { if (srcMessage.getCorrelationId() == null) { throw new HelixException( "Message " + srcMessage.getMessageId() + " does not contain correlation id"); } Message replyMessage = new Message(MessageType.TASK_REPLY, MessageId.from(UUID.randomUUID().toString())); replyMessage.setCorrelationId(srcMessage.getCorrelationId()); replyMessage.setResultMap(taskResultMap); replyMessage.setTgtSessionId(SessionId.from("*")); replyMessage.setMsgState(MessageState.NEW); replyMessage.setSrcName(instanceName); if (srcMessage.getSrcInstanceType() == InstanceType.CONTROLLER) { replyMessage.setTgtName("Controller"); } else { replyMessage.setTgtName(srcMessage.getMsgSrc()); } return replyMessage; }