Iam создание приложения с использованием activeMQ, где у меня есть производитель и потребитель. В потребительском iam с помощью MessageListener для асинхронного прослушивания сообщений от производителя, который выполняется с помощью метода, называемого onMessage (Message message). Но перед употреблением сообщений я хочу выполнить проверку состояния и затем использовать сообщения. Я не хочу использовать синхронное потребление сообщения, потому что это будет против моего дизайна.Как приостановить и возобновить асинхронное потребление сообщений JMS
void initialize() throws JMSException {
this.connection = this.connectionFactory.createConnection();
this.connection.start();
final Session session = this.connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
final Destination destination = session.createQueue("testQ");
this.consumer = session.createConsumer(destination);
this.consumer.setMessageListener(this);
}
Проверить состояние здесь как обнаружение подключения к Интернету и т.д.
public void onMessage(final Message message) {
Preconditions.checkNotNull(message);
if (!(message instanceof TextMessage)) {
_LOG.error("The message is not of type TextMessage but of type {} so we could not process", message.getClass().getSimpleName());
throw new IllegalArgumentException("This type '" + message.getClass().getSimpleName() + "' of message could not been handled");
}
try {
final String messageType = message.getStringProperty("messageType");
Preconditions.checkNotNull(messageType);
_LOG.info("The MessageType is {}", messageType);
final String msg = ((TextMessage) message).getText();
Preconditions.checkNotNull(msg);
_LOG.debug(msg);
process(messageType, msg);
} catch (final JMSException e) {
_LOG.error("We could not read the message", e);
}
}
Любой пример кода, было бы здорово.
Благодарность за reply.Right Я опишу свой сценарий. Возьмите сообщение, которое я потребляю из очереди activemq, я хочу отправить его в веб-службу и перед отправкой в веб-службу iam, проверяющей наличие интернет-соединения или нет. Если интернет-соединение отсутствует, я хочу пауза, потребляющая сообщения из MessageListener, который в конечном итоге истекает в activemq из-за истечения срока действия (который соответствует моему дизайну), и если интернет-соединение вверх, я отправляю сообщения в webservice. Можете мне помочь, отредактировав мой код onMessage, который я разместил выше. –
общественного недействительными OnMessage (последнее сообщение Message) { если (isNetavailable() == ложь) \t \t { \t \t \t попробовать { \t \t \t \t this.connection.stop(); \t \t \t} задвижка (JMSException е) { \t \t \t \t e.printStackTrace(); \t \t \t} \t \t} \t \t еще если (isNetavailable() == TRUE) \t \t { \t \t \t попробовать { \t \t \t \t this.connection.start(); \t \t \t} задвижка (JMSException е1) { \t \t \t \t e1.printStackTrace(); \t \t \t} \t \t} } Мой вопрос здесь после того, как я призываю connection.stop() в OnMessage, если нет подключения к Интернету, то будет ли OnMessage быть вызван в следующий раз, чтобы выполнить connection.start() –
БЩЕСТВЕННЫЕ void onMessage (окончательное сообщение сообщения) { if (isReachable == false) {return;} else –