2016-04-21 14 views
0

Ich arbeite mit den Websphere MQ-Warteschlangen von IBM und möchte eine Verbindung zu mehreren dieser Warteschlangen herstellen, alle Nachrichten durchsuchen und sie alle an eine andere Warteschlange weiterleiten von welcher anderen Anwendung gelesen wird.Der effizienteste Weg, um eine Verbindung zu mehreren Warteschlangen herzustellen und ihre Nachrichten an eine andere Warteschlange weiterzuleiten.

Die Anwendung, die aus der Hauptwarteschlange liest, wird in Java geschrieben und verwendet Spring Boot und JMS, um die Nachrichten aus der Warteschlange zu verarbeiten. Ich fand Schwierigkeiten bei der Verbindung mit mehreren Warteschlangen mit dieser Anwendung, so dass die Idee war, eine Router-Anwendung zu erstellen, die mit mehreren Warteschlangen verbinden, die "Haupt" -Warteschlange löschen und sie mit Nachrichten aus den gesammelten Warteschlangen füllen würde.

Ich begann die "Router" -Anwendung auch in Java und entschied mich, Spring Boot, aber nicht JMS zu verwenden, und fand konzeptionell immer noch einige Schwierigkeiten damit.

Also frage ich mich, ob Java für den Job richtig ist (oder vielleicht etwas Grundlegendes vermisse). Ich denke auch über ein Perl-Skript nach, aber ich bin nicht sehr (wenn überhaupt) mit der Sprache vertraut, aber ich möchte es nicht als praktikable Option diskreditieren.

Also, welche diese beiden Sprachen könnte ich sein:

1) wartbaren

2) Etwas leicht

3) Effiziente

in der Bearbeitung von Aufgaben wie das lesen einen, den ich beschrieben habe?

Pros und Contras von beiden wäre nett.

Antwort

0

Apache Camel schien sehr vielversprechend, aber wurde kämmen nicht gut mit, wie ich meine Frühlings-Boot-app hatte einrichten. Am Ende habe ich IBMs MQ-Bibliothek verwendet.

ich im Grunde diese Optionen nach der Warteschlange einrichten

putMsgOpts = new MQPutMessageOptions(); 

    getFirstMsgOpts = new MQGetMessageOptions(); 
    getFirstMsgOpts.options = MQConstants.MQGMO_BROWSE_FIRST; 

    getNextMsgOpts = new MQGetMessageOptions(); 
    getNextMsgOpts.options = MQConstants.MQGMO_BROWSE_NEXT; 

dann meine Methode

public void transferQueue(MQPropsManager q1) { 
    String message = ""; 
    message = readFromQueue1(q1, getFirstMsgOpts); 
    message = verifyMessage(message); // just a check for empty or null 
    writeToQueue2(message); 
    q1.decrementMessagesLeftToProcess(); // decrement initial queue depth 

    while (q1.getMessagesLeftToProcess() > 0) { 
     message = readFromQueue1(q1, getNextMsgOpts); 
     message = verifyMessage(message); 
     writeToQueue2(message); 
     q1.decrementMessagesLeftToProcess(); 
    } 
    closeQueue(q1); 
} 

dann die beiden Methoden verwenden, die es nennt:

public String readFromQueue1(MQPropsManager q1, 
      MQGetMessageOptions getMsgOpts) { 
     MQMessage msg = new MQMessage(); 
     String message = ""; 
     try { 
      q1.getQueue().get(msg, getMsgOpts); 
      message = msg.readStringOfCharLength(msg.getMessageLength()); 
     } catch (IOException ioe) { 
     // Failed to read string retreived from queue: q1.getQueueName() 
     } catch (MQException mqe) { 
     // Failed to retreive message from queue: q1.getQueueName() 
     } 
     return message; 
    } 

public void writeToQueue2(String message) { 
     MQMessage mqMessage = new MQMessage(); 
     mqMessage.format = MQConstants.MQFMT_STRING; 
     mqMessage.messageType = MQConstants.MQMT_DATAGRAM; 

     try { 
      mqMessage.writeString(message); 
      q2.getQueue().put(mqMessage, putMsgOpts); 
     } catch (IOException ioe) { 
     // Failed to write message: message 
     } catch (MQException mqe) { 
     // Failed to put message: message on to the queue2 
     } 
    } 
1

Das am weitesten fortgeschrittene EIP-Integrationsframework in Java ist Apache Camel. Ich schlage vor, es zu benutzen. Mit Apache Camel können Sie den Router in Form schreiben ähnlich wie diese:

public class Routes extends RouteBuilder { 
    @Override 
    public void configure() throws Exception { 
     from("jms:InputOneQueue1").to("jms:destinationQueue"); 
     from("jms:InputOneQueue2").to("jms:destinationQueue"); 
     from("jms:InputOneQueue3").to("jms:destinationQueue"); 
    } 
} 
+0

Wissen Sie, wenn Dies hat eine einfache Implementierung für die Verwendung von Spring? Insofern wäre jede Warteschlangendefinition nicht zu ausführlich? –

+0

Sie können Apache Kamel mit Frühling verwenden. Es gibt einfache Integrationsbeispiele im Netz. Sie können eines meiner Projekte als Ausgangspunkt verwenden https://github.com/gmaslowski/dam-camel/tree/master/dam-camel-tw – gmaslowski

+0

Brilliant, danke. Ich werde es überprüfen und sehen, ob dies eine Richtung ist, in die ich mich bewegen möchte. –