Таким образом, я использую очередь 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
}
}
}