Morphium Messaging JMS Implementation

Info

Datum: 20. 08. 2019 um 20:58:00

Schlagworte: Java Morphium

Kategorie: morphium

erstellt von Stephan Bösebeck

logged in

ADMIN


Morphium Messaging JMS Implementation

Morphium 4.0.6.2 ist released und diese Version beinhaltet unter anderem eine Änderung, mit der man Morphium Messaging via JMS ansprechen kann.

Hier ein Auszug aus den Tests:

´´´java

public class BasicJMSTests extends MongoTest {

@Test
public void basicSendReceiveTest() throws Exception {
    JMSConnectionFactory factory = new JMSConnectionFactory(morphium);
    JMSContext ctx1 = factory.createContext();
    JMSContext ctx2 = factory.createContext();

    JMSProducer pr1 = ctx1.createProducer();
    Topic dest = new JMSTopic("test1");

    JMSConsumer con = ctx2.createConsumer(dest);
    con.setMessageListener(message -> log.info("Got Message!"));
    pr1.send(dest, "A test");

    ctx1.close();
    ctx2.close();
}


@Test
public void synchronousSendRecieveTest() throws Exception {
    JMSConnectionFactory factory = new JMSConnectionFactory(morphium);
    JMSContext ctx1 = factory.createContext();
    JMSContext ctx2 = factory.createContext();

    JMSProducer pr1 = ctx1.createProducer();
    Topic dest = new JMSTopic("test1");
    JMSConsumer con = ctx2.createConsumer(dest);

    final Map<String, Object> exchange = new ConcurrentHashMap<>();
    Thread senderThread = new Thread(() -> {
        JMSTextMessage message = new JMSTextMessage();
        try {
            message.setText("Test");
        } catch (JMSException e) {
            e.printStackTrace();
        }
        pr1.send(dest, message);
        log.info("Sent out message");
        exchange.put("sent", true);
    });
    Thread receiverThread = new Thread(() -> {
        log.info("Receiving...");
        Message msg = con.receive();
        log.info("Got incoming message");
        exchange.put("received", true);
    });
    receiverThread.start();
    senderThread.start();
    Thread.sleep(5000);
    assert (exchange.get("sent") != null);
    assert (exchange.get("received") != null);
}

} ´´´

Das nur so als Teaser - und das ganze sollte man auch noch als Beta-Stadium betrachten. Außerdem werden einige Features von Morphium Messaging auf diese Art und weise verloren gehen:

  • via JMS wird man voraussichtlich keine direkte Nachricht an einen Knoten senden können
  • der Zugriff via JMS erlaubt einige dinge nicht, wie z.B. custom message Klassen.
  • überhaupt ist Morphium Messaging um einiges flexibler in den Anwendungsbeispielen, als JMS. Da man detaillierter festlegen kann, welche Message wo hin gesendet wird.

Wie gesagt, ist noch im BETA-Stadium, aber definitiv spannend!