Aws SQS Java асинхронный слушатель случайным образом прекращает прослушивание - PullRequest
0 голосов
/ 22 сентября 2018

Таким образом, я использую очередь sqs для передачи данных из одного сервиса в другой, используя сервис sqs amazon, чтобы данные не отбрасывались.Я делаю это асинхронно, используя следующий код.Однако код случайным образом прекратит прослушивание сообщений и не запустится до тех пор, пока я не перезапущу весь сервис, я думаю, что потоки произвольно завершаются, но я не уверен.Есть ли способ гарантировать, что в очереди всегда есть определенное количество слушателей, и если нет, то знает ли кто-нибудь лучший способ прослушивания сообщений sqs, у которых не было бы этой проблемы?Спасибо

public void init() throws JMSException {
    connectionFactory = new SQSConnectionFactory(
            new ProviderConfiguration(),
            AmazonSQSClientBuilder.standard().build());

    // Create the connection
    connection = connectionFactory.createConnection();

    // Create the session
    Session session = connection.createSession(false, SQSSession.UNORDERED_ACKNOWLEDGE);
    MessageConsumer consumer = session.createConsumer( session.createQueue(properties.getQueueName()) );

    ReceiverCallback callback = new ReceiverCallback(svc);
    consumer.setMessageListener( callback );

    connection.start();


}

private static class ReceiverCallback implements MessageListener {

    Service svc;

    public ReceiverCallback(Service svc){
        this.svc = svc;
    }

    @Override
    public void onMessage(Message message) {
        try {
            if(message instanceof TextMessage){
                TextMessage txtMessage = (TextMessage) message;
                svc.processMessage(txtMessage.getText());
            }
            message.acknowledge();
        } catch (Exception e){
            //catch error
        }
    }
}
...