Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如果amazonSqsAsync无效,请防止加载SqsListener和AWSCOConfiguration_Java_Spring_Amazon Web Services_Spring Boot_Amazon Sqs - Fatal编程技术网

Java 如果amazonSqsAsync无效,请防止加载SqsListener和AWSCOConfiguration

Java 如果amazonSqsAsync无效,请防止加载SqsListener和AWSCOConfiguration,java,spring,amazon-web-services,spring-boot,amazon-sqs,Java,Spring,Amazon Web Services,Spring Boot,Amazon Sqs,我有一个MySQSListener和一个AmazonSQSConfig类。(见下面的课程) 如果由于任何原因凭据不正确,我会得到以下异常: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'simpleMessageListenerContainer' defined in class path resource [org/springframework/cloud/aw

我有一个MySQSListener和一个AmazonSQSConfig类。(见下面的课程)

如果由于任何原因凭据不正确,我会得到以下异常:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'simpleMessageListenerContainer' defined in class path resource [org/springframework/cloud/aws/messaging/config/annotation/SqsConfiguration.class]: Invocation of init method failed; nested exception is com.amazonaws.services.sqs.model.AmazonSQSException: The security token included in the request is invalid. (Service: AmazonSQS; Status Code: 403; Error Code: InvalidClientTokenId; Request ID: 729e468d-0c99-56d9-a1db-1ed18e322319)
在这种情况下,我希望停止加载SqsListener和AmazonSQSConfig,而不是使整个应用程序崩溃

有没有办法在加载bean之前测试凭据

谢谢


@Slf4j
@Component
@ConditionalOnExpression("${aws.sqs.enabled:false}")
public class MySQSListener {

  @SqsListener(value = "${aws.sqs.queueName}", deletionPolicy = SqsMessageDeletionPolicy.NEVER)
  public void receiveMessage(MyCustomObject customObject, Acknowledgment acknowledgment) {
     //process custom object
  }
}

和SQSConfig:


@Slf4j
@EnableSqs
@Configuration
@ConditionalOnExpression("${aws.sqs.enabled:false}")
public class AmazonSQSConfig {

  @Bean
  public AWSCredentialsProvider awsCredentialsProvider(
      @Value("${aws.sqs.credentials.accessKey:\"UNKNOWN\"}") final String awsAccessKey,
      @Value("${aws.sqs.credentials.secretKey:\"UNKNOWN\"}") final String awsSecretKey) {
    return new AWSStaticCredentialsProvider(new BasicAWSCredentials(awsAccessKey, awsSecretKey));
  }

  @Bean
  public SimpleMessageListenerContainerFactory simpleMessageListenerContainerFactory(
      AmazonSQSAsync amazonSQSAsync,
      @Value("${aws.sqs.maxNumberOfMessages:10}") int maxNumberOfMessages,
      @Value("${aws.sqs.waitTimeOut:20}") int waitTimeOut,
      @Value("${aws.sqs.visibilityTimeOut:300}") int visibilityTimeOut) {
    SimpleMessageListenerContainerFactory factory = new SimpleMessageListenerContainerFactory();
    factory.setAmazonSqs(amazonSQSAsync);
    factory.setMaxNumberOfMessages(maxNumberOfMessages);
    factory.setWaitTimeOut(waitTimeOut);
    factory.setVisibilityTimeout(visibilityTimeOut);
    factory.setAutoStartup(true);
    return factory;
  }
 
  @Bean
  @Primary
  public AmazonSQSAsync amazonSqsAsync(AWSCredentialsProvider awsCredentialsProvider,
                                       @Value("${aws.sqs.local.endpointOverride:#{null}}")
                                       final String endpointOverride) {
    AmazonSQSAsyncClientBuilder amazonSQSAsyncClientBuilder = AmazonSQSAsyncClientBuilder.standard();
    amazonSQSAsyncClientBuilder.withCredentials(awsCredentialsProvider);
    if (endpointOverride != null) {
      LOG.info(String.format("Found endpoint override in application properties, new endpoint: %s", endpointOverride));
      amazonSQSAsyncClientBuilder.withEndpointConfiguration(
          new AwsClientBuilder.EndpointConfiguration(endpointOverride, Regions.GovCloud.getName()));
    } else {
      amazonSQSAsyncClientBuilder.withRegion(Regions.GovCloud);
    }
    return amazonSQSAsyncClientBuilder.build();
  }

  @Bean
  public QueueMessageHandlerFactory queueMessageHandlerFactory(MessageConverter messageConverter,
                                                               AmazonSQSAsync amazonSQSAsync) {
    QueueMessageHandlerFactory factory = new QueueMessageHandlerFactory();
    factory.setAmazonSqs(amazonSQSAsync);
    AcknowledgmentHandlerMethodArgumentResolver acknowledgmentResolver =
        new AcknowledgmentHandlerMethodArgumentResolver("Acknowledgment");
    PayloadArgumentResolver payloadArgumentResolver = new PayloadArgumentResolver(messageConverter);
    factory.setArgumentResolvers(Arrays.asList(acknowledgmentResolver, payloadArgumentResolver));
    return factory;
  }
  
  @Bean
  public QueueMessagingTemplate queueMessagingTemplate(AmazonSQSAsync amazonSQSAsync) {
    return new QueueMessagingTemplate(amazonSQSAsync);
  }
 
  @Bean
  protected MessageConverter messageConverter(ObjectMapper objectMapper) {
    MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter();
    converter.setObjectMapper(objectMapper);
    converter.setStrictContentTypeMatch(false);
    converter.setSerializedPayloadClass(String.class);
    return converter;
  }
}


可以通过添加SimpleMessageListenerContainerFactorybean的条件创建(@conditional)来实现这一点。在该条件实现中,您可以检查此连接。并使这些豆子自动连线需要假