首页 > 解决方案 > 'FailedToCreateRouteException' Amazon SQS 将 Netflix-Hystrix 引入 Spring 项目

问题描述

我正在尝试将 Hystrix 引入我的 Spring 项目,但是当我将以下依赖项添加到我的 pom 时(尝试从 1.4.4 到最新版本 2.1.1):

<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
   <version>2.1.1.RELEASE</version>
</dependency>

我得到以下异常:

Caused by: org.apache.camel.FailedToCreateRouteException: Failed to create route queue-name-consumer: Route(queue-name-consumer)[[From[aws-sqs://u... because of The specified queue does not exist or you do not have access to it. (Service: AmazonSQS; Status Code: 400; Error Code: AWS.SimpleQueueService.NonExistentQueue)
    at org.apache.camel.impl.RouteService.warmUp(RouteService.java:147) ~[camel-core-2.22.2.jar:2.22.2]
    at org.apache.camel.impl.DefaultCamelContext.doWarmUpRoutes(DefaultCamelContext.java:3949) ~[camel-core-2.22.2.jar:2.22.2]
    at org.apache.camel.impl.DefaultCamelContext.safelyStartRouteServices(DefaultCamelContext.java:3856) ~[camel-core-2.22.2.jar:2.22.2]
    at org.apache.camel.impl.DefaultCamelContext.doStartOrResumeRoutes(DefaultCamelContext.java:3642) ~[camel-core-2.22.2.jar:2.22.2]
    at org.apache.camel.impl.DefaultCamelContext.doStartCamel(DefaultCamelContext.java:3494) ~[camel-core-2.22.2.jar:2.22.2]
    at org.apache.camel.impl.DefaultCamelContext.access$000(DefaultCamelContext.java:209) ~[camel-core-2.22.2.jar:2.22.2]
    at org.apache.camel.impl.DefaultCamelContext$2.call(DefaultCamelContext.java:3253) ~[camel-core-2.22.2.jar:2.22.2]
    at org.apache.camel.impl.DefaultCamelContext.doWithDefinedClassLoader(DefaultCamelContext.java:3272) ~[camel-core-2.22.2.jar:2.22.2]
    at org.apache.camel.impl.DefaultCamelContext.doStart(DefaultCamelContext.java:3249) ~[camel-core-2.22.2.jar:2.22.2]

我正在使用: - Spring Boot 2.0.5 - Camel 2.22.2 - AWS-Java-SDK 1.11.381

我的 SQS 队列在我的 spring 应用程序中以格式配置

@Configuration
public class QueueConfig implements CamelContextAware {

    private final AmazonSQSAsync amazonSQSClient;

    private CamelContext camelContext;

    @Autowired
    public QueueConfig(AmazonSQSAsync amazonSQSClient) {
        this.amazonSQSClient = amazonSQSClient;
    }

    @Override
    public void setCamelContext(CamelContext camelContext) {
        this.camelContext = camelContext;
    }

    @Override
    public CamelContext getCamelContext() {
        return camelContext;
    }


    @Bean(name = "ExampleListenerBean)
    public MessageListener<Exchange> amazonMessageListener(
            RequestHandler handler,
            Acknowledger<AmazonMessage> acknowledger) {

        MessageListener<Exchange> listener =
                new AmazonMessageListener<>(handler, acknowledger, new CamelSQSMessageConverter());
        return listener;
    }

    @Bean(name = "ExampleRequestRouteDefinition")
    public RouteBuilder exampleRouteDefinition(
            @Qualifier(ExampleListenerBean) MessageListener<Exchange> listener) {

        SqsQueueRouteProps properties =
                SqsQueueRouteProps.main("queueDefinition", "path-to-queue").build();

        String queue = properties.getFullQueueName();
        return SqsQueueRouteBuilder.newBuilder(queue, amazonSQSClient, listener, getCamelContext())
                .withRouteName("example-route-name")
                .withProperties(properties)
                .build();
    }

这设置了所有没有 hystrix 依赖项的工作,我不确定在这里寻找什么不兼容性,错误消息具有误导性,因为队列存在我找不到的地方存在冲突。

标签: springmavenspring-cloud-netflixhystrix

解决方案


也提到版本,试试这个!

   <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
    <version>2.1.1.RELEASE</version>
   </dependency>

推荐阅读