Example usage for com.amazonaws.services.sqs.model SendMessageRequest setMessageAttributes

List of usage examples for com.amazonaws.services.sqs.model SendMessageRequest setMessageAttributes

Introduction

In this page you can find the example usage for com.amazonaws.services.sqs.model SendMessageRequest setMessageAttributes.

Prototype


public void setMessageAttributes(java.util.Map<String, MessageAttributeValue> messageAttributes) 

Source Link

Document

Each message attribute consists of a Name, Type, and Value.

Usage

From source file:com.amazon.sqs.javamessaging.SQSMessageProducer.java

License:Open Source License

void sendInternal(Queue queue, Message message) throws JMSException {
    checkClosed();/*from w w w. jav a  2  s .  c  o  m*/
    String sqsMessageBody = null;
    String messageType = null;
    if (message instanceof SQSMessage) {
        message.setJMSDestination(queue);
        if (message instanceof SQSBytesMessage) {
            sqsMessageBody = Base64.encodeAsString(((SQSBytesMessage) message).getBodyAsBytes());
            messageType = SQSMessage.BYTE_MESSAGE_TYPE;
        } else if (message instanceof SQSObjectMessage) {
            sqsMessageBody = ((SQSObjectMessage) message).getMessageBody();
            messageType = SQSMessage.OBJECT_MESSAGE_TYPE;
        } else if (message instanceof SQSTextMessage) {
            sqsMessageBody = ((SQSTextMessage) message).getText();
            messageType = SQSMessage.TEXT_MESSAGE_TYPE;
        }
    } else {
        throw new MessageFormatException(
                "Unrecognized message type. Messages have to be one of: SQSBytesMessage, SQSObjectMessage, or SQSTextMessage");
    }
    if (sqsMessageBody == null || sqsMessageBody.isEmpty()) {
        throw new JMSException("Message body cannot be null or empty");
    }
    Map<String, MessageAttributeValue> messageAttributes = propertyToMessageAttribute((SQSMessage) message);
    addMessageTypeReservedAttribute(messageAttributes, (SQSMessage) message, messageType);
    SendMessageRequest sendMessageRequest = new SendMessageRequest(((SQSQueueDestination) queue).getQueueUrl(),
            sqsMessageBody);
    sendMessageRequest.setMessageAttributes(messageAttributes);

    String messageId = amazonSQSClient.sendMessage(sendMessageRequest).getMessageId();
    LOG.info("Message sent to SQS with SQS-assigned messageId: " + messageId);
    /** TODO: Do not support disableMessageID for now.*/
    message.setJMSMessageID(String.format(SQSMessagingClientConstants.MESSAGE_ID_FORMAT, messageId));
    ((SQSMessage) message).setSQSMessageId(messageId);
}

From source file:org.thingsboard.rule.engine.aws.sqs.TbSqsNode.java

License:Apache License

private TbMsg publishMessage(TbContext ctx, TbMsg msg) {
    String queueUrl = TbNodeUtils.processPattern(this.config.getQueueUrlPattern(), msg.getMetaData());
    SendMessageRequest sendMsgRequest = new SendMessageRequest();
    sendMsgRequest.withQueueUrl(queueUrl);
    sendMsgRequest.withMessageBody(msg.getData());
    Map<String, MessageAttributeValue> messageAttributes = new HashMap<>();
    this.config.getMessageAttributes().forEach((k, v) -> {
        String name = TbNodeUtils.processPattern(k, msg.getMetaData());
        String val = TbNodeUtils.processPattern(v, msg.getMetaData());
        messageAttributes.put(name, new MessageAttributeValue().withDataType("String").withStringValue(val));
    });// w w  w.  java 2 s.  c om
    sendMsgRequest.setMessageAttributes(messageAttributes);
    if (this.config.getQueueType() == TbSqsNodeConfiguration.QueueType.STANDARD) {
        sendMsgRequest.withDelaySeconds(this.config.getDelaySeconds());
    } else {
        sendMsgRequest.withMessageDeduplicationId(msg.getId().toString());
        sendMsgRequest.withMessageGroupId(msg.getOriginator().toString());
    }
    SendMessageResult result = this.sqsClient.sendMessage(sendMsgRequest);
    return processSendMessageResult(ctx, msg, result);
}