我正在尝试创建一个新队列,但是在使用时
cf create-service aws-sqs standard my-q
AWS 中的队列名称是自动分配的,只是一个由随机字母和数字组成的 id。
这在使用普通的 java 客户端时很好。但是,我们想使用spring-cloud-aws-messaging
( @SqsListener
annotation),因为它为我们提供了开箱即用的删除策略,以及一种扩展可见性的方法,以便我们可以轻松地实现重试。
@SqsListener(value = "my-q", deletionPolicy = SqsMessageDeletionPolicy.ON_SUCCESS)
public void listen(TestItem item, Visibility visibility) {
log.info("received message: " + item);
//do business logic
//if call fails
visibility.extend(1000);
//throw exception
//if no failure, message will be dropped
}
注解上的队列名是声明的,所以我们不能在应用程序上读取PCF注入的VCAP_SERVICE环境变量后动态改变它。
我们能想到的唯一替代方法是使用反射来设置注释值的可访问性,并将值设置为 VCAP_SERVICE 上的名称,但这很讨厌,我们希望尽可能避免它。
有没有办法将队列的名称更改为特定于创建的名称?这表明这是可能的,如下所示:
cf create-service aws-sqs standard my-q -c '{ "CreateQueue": { "QueueName": “my-q”, "Attributes": { "MaximumMessageSize": "1024"} } }'
但是,这不起作用。它返回:
不正确的用法:为 -c 标志提供的配置无效。请提供有效的 JSON 对象或包含有效 JSON 对象的文件的路径。
如何在创建队列时设置名称?或者实现我的最终目标的唯一方法是使用反射?
编辑:正如 Daniel Mikusa 所指出的,双引号不是真正的双引号,这导致了错误。该命令现在成功,但它不会创建具有预期名称的队列。我现在想知道是否需要设置此名称bind-service
。该命令也有一个-c
选项,但我找不到任何文档来支持哪些参数可用于aws-sqs
服务。