36.5. 使用方法
36.5.1. SQS producer 设置的消息标头
标头 | 类型 | 描述 |
---|---|---|
|
| Amazon SQS 消息的 MD5 checksum。 |
|
| Amazon SQS 消息 ID。 |
|
| 自 Camel 2.11 起,Amazon SQS 消息可以看到的延迟秒数。 |
36.5.2. SQS consumer 设置的消息标头
标头 | 类型 | 描述 |
---|---|---|
|
| Amazon SQS 消息的 MD5 checksum。 |
|
| 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 队列
在 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 for Single 消息
从 2.23.0,组件具有一个新的选项:delayQueue。当选项设为 true 时,SQS Queue 将是一个 DelayQueue,带有 DelaySeconds 选项作为延迟。有关 DelayQueue 的更多信息,您可以阅读 AWS SQS 文档。要考虑的一个重要信息是:
- 对于标准队列,每个队列延迟设置不会重新修改设置不会影响队列中已存在的消息的延迟。
- 对于 FIFO 队列,每个队列延迟设置正在重新修改设置,会影响队列中已存在的消息延迟。
如官方文档中所述。如果要在单个消息上指定延迟,您可以忽略 delayQueue 选项,但如果您需要向所有消息添加固定延迟,则可以将此选项设置为 true。
36.5.6. 在 SQS 组件中使用 AWS IAM 凭证
要使用 AWS IAM 凭证,您必须首先确认启动 Camel 应用程序的 EC2 实例具有与其关联的 IAM 角色,并附加适当的策略。
此功能应只在远程实例上设置为 true
。另外,还必须在本地使用静态凭证,因为 IAM 是 AWS 特定组件。
要实现此功能,请将IAMCredentials
设置为 true
。
要根据本地和远程环境打开和关闭此功能,您可以考虑使用系统环境变量启用此查询参数。例如,如果名为 isRemote
的系统环境变量设为 true
,您的代码可能会将 useIAMCredentials
query 参数设置为 true
。
虽然此功能不会完全消除对静态凭证的需求,但在 AWS 环境中使用 IAM 凭证不再需要刷新远程环境,并更安全,因为 IAM 凭证每 6 小时自动刷新,并在更新 EC2 安全策略时进行更新。
这是 AWS 推荐的管理凭证的方法,因此应尽可能使用。