public ReceiveResult putMessage(final ReceivingMessage message) {
final RawMessage rawMessage = message.getMessage();
final MessageHeader header = rawMessage.getHeader();
final String msgId = header.getMessageId();
final long start = System.currentTimeMillis();
try {
final PutMessageResult putMessageResult = storage.appendMessage(rawMessage);
final PutMessageStatus status = putMessageResult.getStatus();
if (status != PutMessageStatus.SUCCESS) {
LOG.error("put message error, message:{} {}, status:{}", header.getSubject(), msgId, status.name());
QMon.storeMessageErrorCountInc(header.getSubject());
return new ReceiveResult(msgId, MessageProducerCode.STORE_ERROR, status.name(), -1);
}
AppendMessageResult<MessageSequence> result = putMessageResult.getResult();
final long endOffsetOfMessage = result.getWroteOffset() + result.getWroteBytes();
return new ReceiveResult(msgId, MessageProducerCode.SUCCESS, "", endOffsetOfMessage);
} catch (Throwable e) {
LOG.error("put message error, message:{} {}", header.getSubject(), header.getMessageId(), e);
QMon.storeMessageErrorCountInc(header.getSubject());
return new ReceiveResult(msgId, MessageProducerCode.STORE_ERROR, "", -1);
} finally {
QMon.putMessageTime(header.getSubject(), System.currentTimeMillis() - start);
}
}