AWS SQS Java异步侦听器随机停止侦听

时间:2018-09-22 04:38:38

标签: java amazon-web-services jms amazon-sqs

因此,我正在使用一个sqs队列使用亚马逊的sqs服务将数据从一项服务传递到另一项服务,从而不会丢失任何数据。我正在使用以下代码异步执行此操作。但是,代码将随机停止侦听消息,直到我重新启动整个服务后才开始备份,我认为线程会随机终止,但我并不乐观。有没有一种方法可以确保队列中始终有一定数量的侦听器,如果没有,那么没有人知道一种更好的方法来侦听不会出现此问题的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
        }
    }
}

0 个答案:

没有答案