当前位置: 首页 > 知识库问答 >
问题:

从Spring Boot连接到AWS SQS时出错

屈博
2023-03-14

我正在尝试使用spring cloud AWS将AWS SQS集成到我的springboot应用程序中,但是不断出现这个错误(发布在下面),有人能帮忙吗?

这是我的档案。

org.springframework.beans.factory.beanCreationException:创建类路径资源[org/springframework/cloud/aws/messaging/config/annotation/sqsconfiguration.class]中定义的名为“Simple MessageListenerContainer”的bean时出错:调用init方法失败;嵌套异常为java.lang.nosuchmethoderror:com.amazonaws.http.executioncontext.setcredentials(lcom/amazonaws/auth/awscredentials;)V

@Configuration
public class AWSConfig {
    @Value("${amazon.dynamodb.endpoint}")
    private String amazonDynamoDBEndpoint;

    @Value("${amazon.aws.accesskey}")
    private String amazonAWSAccessKey;

    @Value("${amazon.aws.secretkey}")
    private String amazonAWSSecretKey;

    @Value("${amazon.sqs.endpoint}")
    private String amazonSqsEndpoint;
    @Bean
    @Primary
    public AmazonSQSAsyncClient amazonSQSAsyncClient() {

        AmazonSQSAsyncClient amazonSQSAsyncClient = new AmazonSQSAsyncClient(amazonAWSCredentials());
        if (!StringUtils.isEmpty(amazonSqsEndpoint)) {
            amazonSQSAsyncClient.setEndpoint(amazonSqsEndpoint);
        }

        return amazonSQSAsyncClient;

    }

    @Bean
    public AWSCredentials amazonAWSCredentials() {
        return new BasicAWSCredentials(amazonAWSAccessKey, amazonAWSSecretKey);
    }
}

我可以使用dynamodb,但不能连接到SQS。我已经在application.properties文件中给出了正确的访问密钥、秘密访问密钥和终结点。

@Component
    @EnableSqs
    public class SQSDao {
        private static final Logger logger = LoggerFactory.getLogger(SQSDao.class);

        private  QueueMessagingTemplate queueMessagingTemplate;

        @Autowired
        public SQSDao(AmazonSQSAsync amazonSqs) {
            this.queueMessagingTemplate = new QueueMessagingTemplate(amazonSqs);
        }

        public void send(String message) {
            System.out.println(queueMessagingTemplate.getDefaultDestination());
            queueMessagingTemplate.convertAndSend("test-queue",  MessageBuilder.withPayload(message).build());
        }

        @SqsListener(value = "test-queue", deletionPolicy = SqsMessageDeletionPolicy.NEVER)
        public void receive(String message)
        {
            System.out.println("message: " + message);
        }

    }

共有1个答案

牧梓
2023-03-14

我正面临着与所描述的相同的问题。我的解决方案请求为Config类实现一些额外的方法:

imports [...]

@Configuration
@RefreshScope
public class SpringCloudSQSConfig {

@Value("${cloud.aws.credentials.accessKeyId:default}")
private String accessKeyId;

@Value("${cloud.aws.credentials.secretKey:default}")
private String secretKey;

@Value("${cloud.aws.region.static:default}")
private String region;

private Logger logger = LoggerFactory.getLogger(this.getClass());

@Bean
public QueueMessagingTemplate queueMessagingTemplate() {
    return new QueueMessagingTemplate(amazonSQSAsync());
}

public AmazonSQSAsync amazonSQSAsync() {
    return AmazonSQSAsyncClientBuilder.standard().withRegion(Regions.US_EAST_2)
            .withCredentials(new AWSStaticCredentialsProvider(new BasicAWSCredentials(accessKeyId, secretKey)))
            .build();
}

@Bean
public SimpleMessageListenerContainerFactory simpleMessageListenerContainerFactory() {
    SimpleMessageListenerContainerFactory msgListenerContainerFactory = new SimpleMessageListenerContainerFactory();
    msgListenerContainerFactory.setAmazonSqs(amazonSQSAsync());
    return msgListenerContainerFactory;
}

@Bean
public QueueMessageHandler queueMessageHandler() {
    QueueMessageHandlerFactory queueMsgHandlerFactory = new QueueMessageHandlerFactory();
    queueMsgHandlerFactory.setAmazonSqs(amazonSQSAsync());
    QueueMessageHandler queueMessageHandler = queueMsgHandlerFactory.createQueueMessageHandler();
    List<HandlerMethodArgumentResolver> list = new ArrayList<>();
    HandlerMethodArgumentResolver resolver = new PayloadArgumentResolver(new MappingJackson2MessageConverter());
    list.add(resolver);
    queueMessageHandler.setArgumentResolvers(list);
    return queueMessageHandler;
}
}

对于实现的依赖关系:

        <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-aws</artifactId>
        <version>2.2.1.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-aws-messaging</artifactId>
        <version>2.2.1.RELEASE</version>
    </dependency>

并在属性文件中添加下一个属性:

 类似资料:
  • 问题内容: 我正在尝试使用Firebase和Stripe从我的Android应用处理信用卡付款。我已经在客户端上检索了Stripe令牌,并且在Firebase Cloud Function中使用数据库触发器来捕获发布新订单的情况。这是我的功能代码。 这将产生以下错误: 错误:在Error.Constructor(/user_code/node_modules/stripe/lib/utils.js

  • 问题内容: 我知道我正在做一些非常愚蠢和愚蠢的事情,但是我希望有人可以帮助我建立从Mac上的node.js到mongodb的基本数据库连接。 我已经使用自制软件安装了mongodb,看起来效果很好。我已经以本地登录用户身份启动了服务器(mongod),并打开了第二个终端,并确认可以使用mongo连接到该服务器。当我运行mongo时,出现消息“正在连接:localhost:27017 / test”

  • 我正在尝试从Spring Boot应用程序连接到mySQL数据库。然而,当我试图运行它时,它显示出错误。 我如何解决这个问题? 错误 从我的文件中添加代码片段 pom。xml 应用属性 堆栈跟踪 我还没有在sql中手动创建表,因为我认为spring.jpa.hibernate.ddl-Auto=date应该这样做

  • 问题内容: 我正在尝试在Heroku上以RDS实例作为数据库后端部署Django应用。一切正常,直到我尝试加密连接,然后出现此错误: 设置如下: 标准Django应用程序 具有安全组的MySQL RDS实例允许来自所有IP地址的连接 MySQL用户设置为允许来自任何主机的连接 亚马逊的pem已下载并在Django设置中指定 在Heroku上: 在Django设置中: 我已经尝试搜索,并且已经阅读了

  • 我使用Docker在远程Linux计算机上安装了一个服务。我使用了以下命令 docker运行-p 4443:4443--rm-e openvidu.secret=my_secret-e openvidu.publicurl=https://187.84.228.66:4443 openvidu/openvidu-server-kms 但当我第一次尝试do connect时,我收到了以下错误消息:

  • 我目前正试图找到一个替代我的android应用程序后端。目前,我使用php servlets查询Mysql数据库。数据库(Mysql)托管在我学院的一台计算机上,所以我不能更改任何配置,因为我不是管理员。我只能编辑自己的表。 我试图使用以下代码创建一个java RESTful服务器: