У меня есть:
- Автономный сервер hornetq-2.2.14-final.
- Клиентское приложение C1, которое отправляет сообщения в очередь A
- Клиентское приложение C2, которое использует сообщения из очереди A.
C1 использовать jmstemplate для отправки сообщений в режиме CLIENT_ACKNOWLEDGE:
<bean name="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory" ref="connectionFactory" />
<property name="sessionAcknowledgeModeName" value="CLIENT_ACKNOWLEDGE" />
<property name="sessionTransacted" value="true" />
</bean>
поэтому C2 должен подтверждать сообщения вручную:
@Override
@Transactional
public void onMessage(Message message)
{
try
{
messageHandlerService.handleReceivedMessage(message);
message.acknowledge();
}
catch (DeserializeXmlException e)
{
// TODO log
e.printStackTrace();
}
catch (InvalidMessageException e)
{
//TODO log
e.printStackTrace();
}
catch (JMSException e)
{
//TODO log
e.printStackTrace();
}
}
Мои вопросы:
- Что произойдет с сообщением, когда клиент C2 получил это сообщение, но падает, не подтвердив его?
- Есть ли механизм тайм-аута? если да, то какое время ожидания по умолчанию для подтверждения? как я могу изменить его?