Es gibt bereits ein gutes Tutorial, wie man eine MQ via Zookeeper anspricht, hier aber noch mal explizit für Play (1 und 2).
Schritt 1: Libraries hinzufügen
Play 1
Die Excludes waren für mein Setup nötig, das müssen sie aber nicht generell sein:
1 2 3 4 5 6 7 8 9 10 11 |
require: # ... - io.fabric8 -> fabric-groups 1.0.0.redhat-379: exclude: - org.ow2.asm -> * - io.fabric8 -> fabric-zookeeper 1.0.0.redhat-379: exclude: - org.ow2.asm -> * - org.jboss.amq -> mq-fabric 6.1.0.redhat-379 - org.osgi -> org.osgi.core 5.0.0 - org.osgi -> org.osgi.compendium 5.0.0 |
Damit das funktioniert, müssen die folgenden Repositories in den Ivy-Setting definiert werden:
1 2 |
<ibiblio name="jboss-earlyacces" m2compatible="true" root="https://repository.jboss.org/nexus/content/groups/ea/" /> <ibiblio name="jboss-releases" m2compatible="true" root="https://repository.jboss.org/nexus/content/repositories/fs-releases/" /> |
Eine Anmerkung dazu: Das “Early Access” Repo ist meiner Einschätzung nach eigentlich nicht nötig; alle letztlich verwendeten Dependencies kommen aus dem “Releases” Repo. Aber: Offenbar gibt es irgendwelche transitiven Dependencies, die dort zu finden sind. Sie werden “später” durch andere transitive Dependecies “überschrieben”, aber sie müssen trotzdem aufgelöst werden können! Andernfalls funktioniert zwar auch alles, aber es gibt unschöne Warnings. Und ich habe einige Zeit darauf verwendet, das “Early Access” Repo durch force
und exclude
wegzukonfigurieren – ein Fass ohne Boden 🙂
Play 2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
// has to be here to make resolvers work? import Keys._ // ... libraryDependencies ++= Seq( // ... "io.fabric8" % "fabric-groups" % "1.0.0.redhat-379", "io.fabric8" % "fabric-zookeeper" % "1.0.0.redhat-379", "org.jboss.amq" % "mq-fabric" % "6.1.0.redhat-379", "org.osgi" % "org.osgi.core" % "5.0.0", "org.osgi" % "org.osgi.compendium" % "5.0.0" ) resolvers ++= Seq( // ... "jboss-earlyAccess" at "https://repository.jboss.org/nexus/content/groups/ea/", "jboss-releases" at "https://repository.jboss.org/nexus/content/repositories/fs-releases/" ) |
Schritt 2: Konfiguration
1 2 3 4 5 6 |
messagequeue = { url="discovery:(fabric:my-group-name)", zookeeper.url="127.0.0.1:2181", username=foo, password=bar } |
Schritt 3: Im Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
private static final HOST_URL = String .format("failover:(%s)?nested.wireFormat.maxInactivityDuration=%d&maxReconnectAttempts=1&startupMaxReconnectAttempts=1", Play.application().configuration().getString("messagequeue.url"), TIMEOUT); private static final String USERNAME = Play.application().configuration().getString("messagequeue.username"); private static final String PASSWORD = Play.application().configuration().getString("messagequeue.password"); private static String ZOOKEEPER_URL = Play.configuration.getProperty("messagequeue.zookeeper.url"); // ... ActiveMQConnectionFactory factory = hasCredentials ? new ActiveMQConnectionFactory(USERNAME, PASSWORD, HOST_URL) : new ActiveMQConnectionFactory(HOST_URL); Connection connection = factory.createConnection(); // ... // magic! System.setProperty("zookeeper.url", ZOOKEEPER_URL); |
HTH!