Search in sources :

Example 1 with SendMessageRequestHeader

use of com.yanghui.elephant.common.protocol.header.SendMessageRequestHeader in project elephant by yanghuijava.

the class DefaultMQProducerImpl method send.

public SendResult send(Message msg) throws MQClientException {
    checkMessage(msg, defaultMQProducer);
    SendResult result = new SendResult();
    SendMessageRequestHeader requestHeader = new SendMessageRequestHeader();
    requestHeader.setDestination(msg.getDestination());
    requestHeader.setMessageId(msg.getMessageId());
    requestHeader.setProducerGroup(this.defaultMQProducer.getProducerGroup());
    requestHeader.setProperties(JSON.toJSONString(msg.getProperties()));
    String MessageTypeName = msg.getProperties().get(MessageConstant.PROPERTY_TRANSACTION_PREPARED);
    requestHeader.setMessageType(MessageType.valueOfName(MessageTypeName).getType());
    RemotingCommand request = RemotingCommand.buildRequestCmd(requestHeader, RequestCode.SEND_MESSAGE);
    request.setBody(msg.getBody());
    MQClientException exception = null;
    int timesTotal = 1 + this.defaultMQProducer.getRetryTimesWhenSendFailed();
    result.setMsgId(msg.getMessageId());
    for (int times = 0; times < timesTotal; times++) {
        try {
            RemotingCommand response = this.mqProducerFactory.getRemotingClient().invokeSync(choiceOneServer(), request, this.defaultMQProducer.getSendMsgTimeout());
            switch(response.getCode()) {
                case ResponseCode.SUCCESS:
                    result.setSendStatus(SendStatus.SEND_OK);
                    break;
                case ResponseCode.FUSH_DB_FAIL:
                    result.setSendStatus(SendStatus.FLUSH_DB_FAIL);
                    break;
                case ResponseCode.SEND_MQ_FAIL:
                    result.setSendStatus(SendStatus.SEND_MQ_FAIL);
                    break;
                case ResponseCode.SERVER_FAIL:
                    result.setSendStatus(SendStatus.SERVER_FAIL);
                    break;
                default:
                    result.setSendStatus(SendStatus.SEND_FAIL);
                    break;
            }
            return result;
        } catch (RemotingTimeoutException e) {
            result.setSendStatus(SendStatus.FLUSH_DISK_TIMEOUT);
            break;
        } catch (Exception e) {
            exception = new MQClientException("message send exception", e);
            continue;
        }
    }
    if (exception != null) {
        throw exception;
    }
    return result;
}
Also used : RemotingCommand(com.yanghui.elephant.remoting.procotol.RemotingCommand) SendMessageRequestHeader(com.yanghui.elephant.common.protocol.header.SendMessageRequestHeader) RemotingTimeoutException(com.yanghui.elephant.remoting.exception.RemotingTimeoutException) SendResult(com.yanghui.elephant.client.producer.SendResult) TransactionSendResult(com.yanghui.elephant.client.producer.TransactionSendResult) MQClientException(com.yanghui.elephant.client.exception.MQClientException) RemotingSendRequestException(com.yanghui.elephant.remoting.exception.RemotingSendRequestException) MQClientException(com.yanghui.elephant.client.exception.MQClientException) RemotingConnectException(com.yanghui.elephant.remoting.exception.RemotingConnectException) RemotingTimeoutException(com.yanghui.elephant.remoting.exception.RemotingTimeoutException)

Example 2 with SendMessageRequestHeader

use of com.yanghui.elephant.common.protocol.header.SendMessageRequestHeader in project elephant by yanghuijava.

the class MessageRequestProcessor method processRequest.

@Override
public RemotingCommand processRequest(ChannelHandlerContext ctx, RemotingCommand request) {
    log.info("处理请求消息:{}", request);
    SendMessageRequestHeader requestHeader = (SendMessageRequestHeader) request.decodeCommandCustomHeader(SendMessageRequestHeader.class);
    switch(MessageType.valueOf(requestHeader.getMessageType())) {
        case NORMAL_MESSAGE:
            return normalMessageHandle(requestHeader, request);
        case TRANSACTION_PRE_MESSAGE:
            return transactionMessageHandle(requestHeader, request);
        default:
            break;
    }
    return null;
}
Also used : SendMessageRequestHeader(com.yanghui.elephant.common.protocol.header.SendMessageRequestHeader)

Aggregations

SendMessageRequestHeader (com.yanghui.elephant.common.protocol.header.SendMessageRequestHeader)2 MQClientException (com.yanghui.elephant.client.exception.MQClientException)1 SendResult (com.yanghui.elephant.client.producer.SendResult)1 TransactionSendResult (com.yanghui.elephant.client.producer.TransactionSendResult)1 RemotingConnectException (com.yanghui.elephant.remoting.exception.RemotingConnectException)1 RemotingSendRequestException (com.yanghui.elephant.remoting.exception.RemotingSendRequestException)1 RemotingTimeoutException (com.yanghui.elephant.remoting.exception.RemotingTimeoutException)1 RemotingCommand (com.yanghui.elephant.remoting.procotol.RemotingCommand)1