36.5. 使用方法
36.5.1. SQS producer 设置的消息标头
标头 | 类型 | 描述 |
---|---|---|
|
| Amazon SQS 消息的 MD5 校验和。 |
|
| Amazon SQS 消息 ID。 |
|
| 从 Camel 2.11 开始,Amazon SQS 消息可以看到延迟秒数。 |
36.5.2. SQS 使用者设置的消息标头
标头 | 类型 | 描述 |
---|---|---|
|
| Amazon SQS 消息的 MD5 校验和。 |
|
| Amazon SQS 消息 ID。 |
|
| Amazon SQS 消息接收处理。 |
|
| Amazon SQS 消息属性。 |
36.5.3. 高级 AmazonSQS 配置
如果您的 Camel 应用程序在防火墙后面运行,或者需要对 AmazonSQS 实例配置有更多控制,您可以创建自己的实例:
AWSCredentials awsCredentials = new BasicAWSCredentials("myAccessKey", "mySecretKey"); ClientConfiguration clientConfiguration = new ClientConfiguration(); clientConfiguration.setProxyHost("http://myProxyHost"); clientConfiguration.setProxyPort(8080); AmazonSQS client = new AmazonSQSClient(awsCredentials, clientConfiguration); registry.bind("client", client);
并在 Camel aws-sqs 组件配置中引用它:
from("aws-sqs://MyQueue?amazonSQSClient=#client&delay=5000&maxMessagesPerPoll=5") .to("mock:result");
36.5.4. 创建或更新 SQS Queue
在 SQS 组件中,当启动端点时,将执行检查来获取队列是否存在的信息。您可以使用 SQSConfiguration 选项通过 QueueAttributeName 映射自定义创建。
from("aws-sqs://MyQueue?amazonSQSClient=#client&delay=5000&maxMessagesPerPoll=5") .to("mock:result");
在本例中,如果 AWS 上尚未创建 MyQueue 队列,它将使用 SQS 配置中的默认参数创建。如果已在 AWS 上启动,SQS 配置选项将用于覆盖现有的 AWS 配置。
36.5.5. DelayQueue VS Delay 用于单一消息
从 2.23.0,组件有一个新选项: delayQueue。当选项设为 true 时,SQS Queue 将是一个 DelayQueue,并将 DelaySeconds 选项设为 delay。有关 DelayQueue 的更多信息,您可以阅读 AWS SQS 文档。要考虑的一个重要信息是:
- 对于标准队列,每个队列延迟设置不会重新交换设置,不会影响队列中已存在的消息延迟。
- 对于 FIFO 队列,每个队列延迟设置重新交换设置会影响队列中已存在的消息的延迟。
如官方文档中所述。如果要在单个消息上指定延迟,您可以忽略 delayQueue 选项,而如果需要向所有消息添加固定延迟,则可以将此选项设置为 true。
36.5.6. 在 SQS 组件中使用 AWS IAM 凭证
要使用 AWS IAM 凭证,您必须首先确认您要启动 Camel 应用程序的 EC2 实例已关联,并且已附加了适当的策略。
此功能应只在远程实例上设置为 true
。另外,还必须在本地使用静态凭证,因为 IAM 是一个 AWS 特定组件。
要实现此功能集,请使用IAMCredentials
to true
。
要根据本地和远程环境打开和关闭此功能,您可以考虑使用系统环境变量启用此查询参数。例如,如果名为 isRemote
的系统环境变量设置为 true
,则您的代码可将 useIAMCredentials
查询参数设置为 true
。
虽然此功能不会完全不需要静态凭证,但在 AWS 环境中使用 IAM 凭证会删除在远程环境中刷新的需要,因为 IAM 凭证每 6 小时自动刷新,并在更新 EC2 安全策略时也会更新。
这是 AWS 推荐管理凭证的方法,因此应尽可能使用。