Spring 使用PCF Service Broker设置自定义命名SQS队列

Spring 使用PCF Service Broker设置自定义命名SQS队列,spring,amazon-sqs,cloud-foundry,aws-java-sdk,spring-cloud-aws,Spring,Amazon Sqs,Cloud Foundry,Aws Java Sdk,Spring Cloud Aws,我正在尝试创建一个新队列,但在使用 cf create-service aws-sqs standard my-q AWS中队列的名称是自动分配的,只是由随机字母和数字组成的id 这在使用普通java客户机时很好。但是,我们希望使用spring-cloud-aws-messaging(@SqsListenerannotation),因为它为我们提供了现成的删除策略和扩展可见性的方法,因此我们可以轻松地实现重试 @SqsListener(value = "my-q", deletionP

我正在尝试创建一个新队列,但在使用

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_服务环境变量后,无法动态更改它

我们能想到的唯一替代方法是使用反射来设置注释值的可访问性,并将该值设置为VCAP_服务上的名称,但这太糟糕了,如果可能的话,我们希望避免这种情况

有没有办法在创建时将队列的名称更改为特定的名称?表明这是可能的,如下所示:

cf create-service aws-sqs standard my-q -c '{ "CreateQueue": {  "QueueName": “my-q”, "Attributes": { "MaximumMessageSize": "1024"} } }'
然而,这不起作用。它返回:

用法不正确:为-c标志提供的配置无效。请 提供包含有效JSON的文件的有效JSON对象或路径 反对

如何在创建队列时设置名称?或者说,实现我最终目标的唯一方法就是反思


编辑:正如Daniel Mikusa所指出的,双引号不是真正的双引号,这导致了错误。该命令现在成功了,但是它没有创建具有预期名称的队列。我现在想知道是否需要在
bindservice
上设置此名称。该命令也有一个
-c
选项,但我找不到任何文档来支持哪些参数可用于
aws sqs
服务。

使用
cf create service-c
是一种方法。您的JSON中有一些不喜欢的地方。当我将JSON复制并粘贴到验证器中时,它失败了。名称
my-q
周围的引号字符似乎不是简单的双引号。如果我删除它们并用常规双引号字符替换它们,那么它是有效的。也许可以试一试?否则,也许看看你使用的外壳?您可以尝试将其放入一个文件中,然后改为
cf create service-c path/to/file.json
。当我转到PCF时,我仍然在名称和URL中看到一个随机id。文档似乎非常清楚,它应该被传递到
cf create service
命令中。我快速浏览了代理的源代码,但没有看到它在提供服务时读取队列名称属性。它似乎只读取
Attributes
块下的内容,因此它看起来像是一个docs错误(或者至少该属性没有以明显的方式使用)。从我所看到的队列名称是由前缀+服务实例guid组成的,它似乎与您所看到的相匹配。我不是这方面的专家,所以我可能会遗漏一些东西。我的建议是联系Pivotal支持。他们可以给你更多的帮助,挖掘更多。最好的情况是我遗漏了一些东西,有一种方法可以设置队列名称。最糟糕的情况是,他们可以更新文档并为您记录功能请求。对我来说,你所做的似乎是合理的。使用
cf create service-c
是一种方法。您的JSON中有一些不喜欢的地方。当我将JSON复制并粘贴到验证器中时,它失败了。名称
my-q
周围的引号字符似乎不是简单的双引号。如果我删除它们并用常规双引号字符替换它们,那么它是有效的。也许可以试一试?否则,也许看看你使用的外壳?您可以尝试将其放入一个文件中,然后改为
cf create service-c path/to/file.json
。当我转到PCF时,我仍然在名称和URL中看到一个随机id。文档似乎非常清楚,它应该被传递到
cf create service
命令中。我快速浏览了代理的源代码,但没有看到它在提供服务时读取队列名称属性。它似乎只读取
Attributes
块下的内容,因此它看起来像是一个docs错误(或者至少该属性没有以明显的方式使用)。从我所看到的队列名称是由前缀+服务实例guid组成的,它似乎与您所看到的相匹配。我不是这方面的专家,所以我可能会遗漏一些东西。我的建议是联系Pivotal支持。他们可以给你更多的帮助,挖掘更多。最好的情况是我遗漏了一些东西,有一种方法可以设置队列名称。最糟糕的情况是,他们可以更新文档并为您记录功能请求。你想做的对我来说似乎是合理的。