Ich bin eine Anwendung mit ActiveMQ erstellen, wo ich einen Produzenten und einen Verbraucher habe. In der Consumer Iam mit einem MessageListener, um Nachrichten von Producer asynchron abhören, die mit einer Methode namens OnMessage (Message-Nachricht) erfolgt ist. Aber bevor ich die Nachrichten konsumiere, möchte ich eine Zustandsprüfung durchführen und dann die Nachrichten konsumieren. Ich möchte keinen synchronen Nachrichtenverbrauch verwenden, da dies gegen mein Design verstößt.Wie pausiere und setze ich den asynchronen Verbrauch von JMS-Nachrichten fort
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);
}
prüfen Zustand hier wie Erkennung von Internet-Verbindung usw.
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);
}
}
Jeder Code Beispiel wäre toll.
Danke für die reply.Right Ich werde mein Szenario beschreiben. Nehmen Sie die Nachricht, die ich aus activemq Warteschlange konsumiere, möchte ich es an einen Webservice senden und vor dem Senden an einen Webservice iam prüfen, ob die Internetverbindung vorhanden ist oder nicht. Wenn die Internetverbindung nicht vorhanden ist, möchte ich Pause die Nachrichten verbrauchen von MessageListener, der schließlich im activemq wegen der Ablaufzeit ablaufen wird (die entsprechend meinem Entwurf ist) und wenn die Internetverbindung Verbindung ist, sende ich die Nachrichten an webservice.Can Sie helfen mir, indem Sie meinen onMessage Code redigieren, den ich oben gepostet habe. –
public void onMessage (letzte Nachricht Nachricht) { if (isNetavailable() == false) \t \t { \t \t \t try { \t \t \t \t this.connection.stop(); \t \t \t} catch (JMSException e) { \t \t \t \t e.printStackTrace(); \t \t \t} \t \t} \t \t else if (isNetavailable() == true) \t \t { \t \t \t try { \t \t \t \t this.connection.start(); \t \t \t} catch (JMSException e1) { \t \t \t \t e1.printStackTrace(); \t \t \t} \t \t} } Meine Frage ist hier, nachdem ich connection.stop() in onMessage berufen, wenn keine Internetverbindung ist, dann wird die onMessage das nächste Mal aufgerufen werden connection.start() –
eschallungssysteme auszuführen void onMessage (letzte Nachricht) { if (isReachable == false) {return;} else –