通过PCF Service Broker设置自定义名称的SQS队列

时间:2019-04-05 11:35:11

标签: spring amazon-sqs pivotal-cloud-foundry aws-java-sdk spring-cloud-aws

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

cf create-service aws-sqs standard my-q

AWS中的队列名称是自动分配的,只是由随机字母和数字组成的ID。

使用普通的Java客户端时,这很好。但是,我们要使用spring-cloud-aws-messaging@SqsListener批注),因为它为我们提供了开箱即用的删除策略以及一种扩展可见性的方法,以便我们可以轻松地实现重试。

    @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上的名称,但这太讨厌了,如果可能的话,我们希望避免使用它。 / p>

是否可以将队列名称更改为创建时特定的名称? This暗示可能,如下所示:

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服务可用的参数。

0 个答案:

没有答案