весеннее облако AWS отправь и получи - PullRequest
0 голосов
/ 24 апреля 2020

Мне нужно отправить и получить сообщение SQS, как я это делаю в rabbitmq. Поэтому мне нужно сделать это синхронно. Проблема в том, что если я использую @SqsListener при весенней загрузке, метод никогда не вызывается, если у него есть подпись, отличная от (String s). Любая другая подпись не просто работает, метод не запускается.

Моя конфигурация:

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

    @Bean
    public AmazonSQSAsync amazonSQSAsync() {
        return AmazonSQSAsyncClientBuilder.standard().withRegion(Regions.US_EAST_1)
                .withCredentials(new AWSStaticCredentialsProvider(new BasicAWSCredentials(awsAccessKey, awsSecretKey)))
                .build();
    }

    @Bean
    public SimpleMessageListenerContainer simpleMessageListenerContainer() {
        SimpleMessageListenerContainer msgListenerContainer = simpleMessageListenerContainerFactory()
                .createSimpleMessageListenerContainer();
        msgListenerContainer.setMessageHandler(queueMessageHandler());
        return msgListenerContainer;
    }

    @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);
        list.add( new HeaderMethodArgumentResolver(null, null));
        queueMessageHandler.setArgumentResolvers(list);
        return queueMessageHandler;
    }

, а получатель:

@SqsListener(value = {"${cloud.aws.end-point.uri}"}, deletionPolicy = SqsMessageDeletionPolicy.ALWAYS)
    public void receive(String message)  {
        System.out.println("Inside receive: " + message);
    }

Если у этого метода есть какая-либо другая подпись, он даже не будет запущен. Что я должен сделать, чтобы получить необработанное сообщение aws, которое необходимо использовать в AwsSQSResponder?

1 Ответ

0 голосов
/ 08 мая 2020

Вы пробовали аннотацию @Payload?

@SqsListener(value = {"${cloud.aws.end-point.uri}"}, deletionPolicy = SqsMessageDeletionPolicy.ALWAYS)
    public void receive(@Payload String message)  {
        System.out.println("Inside receive: " + message);
    }
...