Как настроить очередь сообщений AWS (SMS) в React и Java Spring

У меня есть приложение на основе React в экземпляре AWS EC2 и приложение на основе Java Spring Boot в другом экземпляре AWS EC2. Мне нужно отправлять запросы POST с помощью AWS SQS из приложения React. После отправки сообщений мне нужно получить их в конечных точках API хостинга приложения Java Spring. Руководство о том, как выполнять операции отправки и получения, было бы признательно.


person IMOsiris    schedule 22.11.2017    source источник


Ответы (1)


Я использовал приведенный ниже код для извлечения объекта из sqs.

MessagingConfiguration.java

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.listener.DefaultMessageListenerContainer;

import com.amazon.sqs.javamessaging.SQSConnectionFactory;
import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.auth.AWSCredentialsProvider;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.auth.DefaultAWSCredentialsProviderChain;
import com.es.spring.messaging.MessageReceiver;

@Configuration
public class MessagingConfiguration {

        @Value("${queue.endpoint}")
        private String endpoint;

        @Value("${queue.name}")
        private String queueName;

        @Autowired
        private MessageReceiver messageReceiver;

        @Bean
        public DefaultMessageListenerContainer jmsListenerContainer() {

            SQSConnectionFactory sqsConnectionFactory = SQSConnectionFactory.builder()
                    .withAWSCredentialsProvider(new DefaultAWSCredentialsProviderChain())
                    .withEndpoint(endpoint)
                    .withAWSCredentialsProvider(awsCredentialsProvider)
                    .withNumberOfMessagesToPrefetch(10).build();

            DefaultMessageListenerContainer dmlc = new DefaultMessageListenerContainer();
            dmlc.setConnectionFactory(sqsConnectionFactory);
            dmlc.setDestinationName(queueName);

            dmlc.setMessageListener(messageReceiver);

            return dmlc;
        }

        @Bean
        public JmsTemplate createJMSTemplate() {

            SQSConnectionFactory sqsConnectionFactory = SQSConnectionFactory.builder()
                    .withAWSCredentialsProvider(awsCredentialsProvider)
                    .withEndpoint(endpoint)
                    .withNumberOfMessagesToPrefetch(10).build();

            JmsTemplate jmsTemplate = new JmsTemplate(sqsConnectionFactory);
            jmsTemplate.setDefaultDestinationName(queueName);
            jmsTemplate.setDeliveryPersistent(false);


            return jmsTemplate;
        }

        private final AWSCredentialsProvider awsCredentialsProvider = new AWSCredentialsProvider() {
            @Override
            public AWSCredentials getCredentials() {
                return new BasicAWSCredentials("accessKey", "Secretkey");
            }

            @Override
            public void refresh() {

            }
    };

}

MessageReceiver.java

import java.io.PrintWriter;
import java.io.StringWriter;

import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;


import com.fasterxml.jackson.databind.ObjectMapper;

@Component
public class MessageReceiver implements MessageListener{

     Logger LOG = LoggerFactory.getLogger(MessageReceiver.class);

    @Override
    public void onMessage(Message message) {
        try {
            TextMessage textMessage = (TextMessage) message;
            System.out.println("message:"+textMessage.getText());
            CustomClass activeMq =new ObjectMapper().readValue(textMessage.getText(),CustomClass.class);
            LOG.info("Application : Active Mq : {}",activeMq);  

        } catch (Exception e) {     
            e.printStackTrace();            
        }

    }
}

Отправьте сообщение в SQS.

AmazonSQS awsSqs = new AwsSqsClient().getAWSSqsclient();        
        awsSqs.sendMessage(new SendMessageRequest().withDelaySeconds(60)
                .withQueueUrl("https://sqs-url/TestQueue").withMessageBody(input));

Надеюсь, что ответ выше поможет вам.

person Vaibs    schedule 22.11.2017
comment
Спасибо за ответ; Отдельное спасибо за пример получения сообщений на Java. Я буду отправлять сообщения через React (JavaScript), так что у вас есть пример того, как их отправлять? - person IMOsiris; 22.11.2017
comment
перейдите по этой ссылке. документы. aws.amazon.com/sdk-for-javascript/v2/developer-guide/ - person Vaibs; 23.11.2017