Amazon Simple Queue Service
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

教程:将带有属性的消息发送到 Amazon SQS 队列

您可以使用消息属性在消息中包括结构化的元数据 (例如时间戳、地理空间数据、签名和标识符)。。在本教程中,您将学习如何将带有属性的消息发送到现有队列。有关更多信息,请参阅 Amazon SQS 消息属性

有关将消息发送到标准和 FIFO 队列的详细说明,请参阅Sending a Message to an Amazon SQS Queue

AWS 管理控制台

  1. 登录 Amazon SQS 控制台

  2. 从队列列表中选择一个队列。

  3. 队列操作中,选择发送消息

    将显示 Send a Message to QueueName 对话框。

    以下示例显示了特定于 FIFO 队列(已禁用 content-based deduplication)的消息组 ID消息重复数据删除 ID 参数。

  4. 要将消息发送到 FIFO 队列,请键入消息正文消息组 ID MyMessageGroupId1234567890消息重复数据删除 ID MyMessageDeduplicationId1234567890,然后选择发送消息

  5. 定义消息属性参数。有关更多信息,请参阅 消息属性组件消息属性数据类型

    1. 对于消息属性名称,键入 MyMessageAttribute

    2. 对于消息属性数据类型,选择数字并为可选自定义类型键入 byte

    3. 对于消息属性,键入 24

    选择添加属性

    属性作为 Number.byte 添加到消息中。

    您可在发送消息之前修改值。要删除属性,请选择

  6. 完成将属性添加到消息中之后,选择发送消息

    您的消息将会发送,并显示 Send a Message to QueueName 对话框,其中将显示已发送消息的属性。

    以下示例显示了特定于您的自定义消息属性的消息属性的 MD5,以及特定于 FIFO 队列的序列号属性

  7. 选择 Close

AWS SDK for Java

在您开始处理示例代码之前,请指定 AWS 凭证。有关更多信息,请参阅 AWS SDK for Java Developer Guide 中的设置用于开发的 AWS 凭证和区域

将带有属性的消息发送到队列

  1. 复制 标准 队列示例程序FIFO 队列示例程序

  2. 要为消息定义属性,请添加使用 MessageAttributeValue 数据类型的以下代码。有关更多信息,请参阅 消息属性组件消息属性数据类型

    注意

    AWS SDK for Java 自动计算消息正文和消息属性校验和并将其与 Amazon SQS 返回的数据进行比较。有关更多信息,请参阅AWS SDK for Java Developer Guide;有关其他编程语言,请参阅计算消息属性 MD5 消息摘要

    字符串数字二进制字符串 (自定义)数字 (自定义)二进制 (自定义)
    字符串

    此示例定义 String 属性,其名称为 Name,值为 Jane

    final Map<String, MessageAttributeValue> messageAttributes = new HashMap<>(); messageAttributes.put("Name", new MessageAttributeValue() .withDataType("String") .withStringValue("Jane"));
    数字

    此示例定义 Number 属性,其名称为 AccurateWeight,值为 230.000000000000000001

    final Map<String, MessageAttributeValue> messageAttributes = new HashMap<>(); messageAttributes.put("AccurateWeight", new MessageAttributeValue() .withDataType("Number") .withStringValue("230.000000000000000001"));
    二进制

    此示例定义 Binary 属性,其名称为 ByteArray,值为未初始化的 10 字节数组。

    final Map<String, MessageAttributeValue> messageAttributes = new HashMap<>(); messageAttributes.put("ByteArray", new MessageAttributeValue() .withDataType("Binary") .withBinaryValue(ByteBuffer.wrap(new byte[10])));
    字符串 (自定义)

    此示例定义自定义属性 String.EmployeeId,其名称为 EmployeeId,值为 ABC123456

    final Map<String, MessageAttributeValue> messageAttributes = new HashMap<>(); messageAttributes.put("EmployeeId", new MessageAttributeValue() .withDataType("String.EmployeeId") .withStringValue("ABC123456"));
    数字 (自定义)

    此示例定义自定义属性 Number.AccountId,其名称为 AccountId,值为 0023456

    final Map<String, MessageAttributeValue> messageAttributes = new HashMap<>(); messageAttributes.put("AccountId", new MessageAttributeValue() .withDataType("Number.AccountId") .withStringValue("000123456"));

    注意

    由于基本数据类型为 NumberReceiveMessage 操作返回 123456

    二进制 (自定义)

    此示例定义自定义属性 Binary.JPEG,其名称为 ApplicationIcon,值为未初始化的 10 字节数组。

    final Map<String, MessageAttributeValue> messageAttributes = new HashMap<>(); messageAttributes.put("ApplicationIcon", new MessageAttributeValue() .withDataType("Binary.JPEG") .withBinaryValue(ByteBuffer.wrap(new byte[10])));
  3. 使用以下内容替换发送消息的代码部分:

    // Send a message with an attribute final SendMessageRequest sendMessageRequest = new SendMessageRequest(); sendMessageRequest.withMessageBody("This is my message text."); sendMessageRequest.withQueueUrl(myQueueUrl); sendMessageRequest.withMessageAttributes(messageAttributes); sqs.sendMessage(sendMessageRequest);

    重要

    如果您将消息发送到 FIFO 队列,请确保 sendMessage 方法在您提供消息组 ID 之后 执行。

    如果您使用 SendMessageBatch 操作而非 SendMessage,则必须指定批处理中单个消息的消息属性。

  4. 编译并运行示例。

    消息已发送到队列。此响应包含下列项目:

    • Amazon SQS 分配给该消息的消息 ID

    • 消息正文的 MD5 摘要,用于确认 Amazon SQS 正确接收了消息 (有关更多信息,请参阅 RFC1321)。

    • 消息属性的 MD5 摘要,用于确认 Amazon SQS 正确接收了消息属性。

    • Amazon SQS 分配给您的请求的请求 ID