Eingebettet AMQP Broker-Java
Ich versuche zu erstellen, integration-test für eine Scala /Java-Anwendung, die eine Verbindung zu einem RabbitMQ-broker. Um dies zu erreichen möchte ich einen embedded-broker, spricht AMQP, dass ich starten und stoppen Sie vor jedem test. Ursprünglich wollte ich einführen, ActiveMQ als embedded-broker mit AMQP jedoch die Anwendung verwendet RabbitMQ so spricht nur AMQP version 0.9.3 in der Erwägung, dass ActiveMQ erfordert AMQP 1.0 version.
Gibt es da noch andere embedded-broker, die ich verwenden kann an Stelle von ActiveMQ?
RabbitMQ implementiert AMQP 0.8; 0.9.1 und AMQP 1.0. Wenn Sie einen mac verwenden, es ist ganz einfach, start/stop-rabbitmq für Ihre tests. Dies ist für PHP können aber helfen, Sie in Ihrem use-case - videlalvaro.github.io/2013/04/using-rabbitmq-in-unit-tests.html
Hi @old_sound, Dank für das schauen hinein. Idealerweise würde ich gerne vermeiden, erfordern rabbitmq auf die box zu testen, unsere tests auf einem CI-server, wir können nicht installieren RabbitMQ leicht.
Nicht, dass CI-server hat Erlang installiert mindestens? Wenn ja, können Sie einfach laden Sie die Kaninchen-tarball herunter, entpacken es und starten/stoppen der tests
Da hast du einige Antworten unten, die scheinen, um Ihre Frage zu beantworten, bitte beachten Sie die Kennzeichnung als 'Akzeptiert', indem Sie auf die tickmark unten Ihre Stimme zählen (siehe So akzeptieren Sie eine Antwort?). Dies zeigt die Antwort, die Ihnen bisher am meisten geholfen, und es weist Ruf Punkte für den Autor die Antwort (und Sie!). Es ist Teil der diese Website die Idee zu identifizieren, die gute Fragen und Antworten durch upvotes und Akzeptanz von Antworten.
Hi @old_sound, Dank für das schauen hinein. Idealerweise würde ich gerne vermeiden, erfordern rabbitmq auf die box zu testen, unsere tests auf einem CI-server, wir können nicht installieren RabbitMQ leicht.
Nicht, dass CI-server hat Erlang installiert mindestens? Wenn ja, können Sie einfach laden Sie die Kaninchen-tarball herunter, entpacken es und starten/stoppen der tests
Da hast du einige Antworten unten, die scheinen, um Ihre Frage zu beantworten, bitte beachten Sie die Kennzeichnung als 'Akzeptiert', indem Sie auf die tickmark unten Ihre Stimme zählen (siehe So akzeptieren Sie eine Antwort?). Dies zeigt die Antwort, die Ihnen bisher am meisten geholfen, und es weist Ruf Punkte für den Autor die Antwort (und Sie!). Es ist Teil der diese Website die Idee zu identifizieren, die gute Fragen und Antworten durch upvotes und Akzeptanz von Antworten.
InformationsquelleAutor ahjmorton | 2015-06-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Eine vollständig in-memory-Lösung. Ersetzen Sie die
spring.*
Eigenschaften als erforderlich.Hinzufügen
initial-config.json
als Ressource:Werden Sie sich bewusst, dass, wenn Ihre Anwendung eine Verbindung zu RabbitMQ in prod, Sie entdecken könnte zu Inkonsistenzen, wenn Sie binden an Apache QPid für integration tests. RabbitMQ erweitert wurde, AMQP, um zusätzliche Funktionen bereitzustellen, die die Anwendung könnte sich auf (zB. TTLs, DLE/Qs, routing, ...). Mehr info rabbitmq.com/extensions.html
QPid hat die meisten das auch, nur mit unterschiedlichen Namen.
Ich kann es nicht verwenden, weil Sie codieren Sie die logger-Klasse. So schade... org.apache.die Protokollierung.slf4j.Log4jLogger kann nicht umgewandelt werden, ch.qos.logback.classic.Logger java.lang.Classcastexception-Fehler: org.apache.die Protokollierung.slf4j.Log4jLogger kann nicht umgewandelt werden, ch.qos.logback.classic.Logger
danke für den Hinweis! Können Sie mir einige embedded-Beispiele für die Verwendung von 7.x? Die ganze API geändert und ich fand kaum Beispiele, wie es zu benutzen. Dieser ist alle, die ich finden konnte, aber ich kann nicht damit es funktioniert mit einer Passwort-Datei.
InformationsquelleAutor OrangeDog
Habe ich entwickelt ein wrapper um den Prozess von herunterladen, entpacken, starten und verwalten von RabbitMQ so kann es funktionieren wie ein embedded service gesteuert JVM-Projekt.
Check it out: https://github.com/AlejandroRivera/embedded-rabbitmq
Es ist so einfach wie:
Funktioniert auf Linux, Mac und Windows.
Funktioniert Super, aber ERL werden müssen, vorinstalliert ist ein problem für mich.
InformationsquelleAutor Alejandro
Hier ist die vorgeschlagene Lösung von OrangeDog angepasst Qpid Broker 7.x, inspiriert von hier:
Hinzufügen qpid 7.x als test-Abhängigkeiten. In der 7.x diese wurden getrennt in core + plugins, je nachdem, was Sie brauchen. Für RabbitMQ AMQP version, die Sie benötigen
qpid-broker-plugins-amqp-0-8-protocol
und für die Ausführung von im Speicher (ausreichend für die integration-tests) verwendenqpid-broker-plugins-memory-store
.pom.xml
:Add broker-Konfiguration mit hart codierten Benutzer/Kennwort und Standard-in-memory-virtual-host zugeordnet, auf Standard-port (5672):
qpid-config.json
:Definieren junit
ExternalResource
und erklären, wieClassRule
(oder "start" und schließen Sie Ihre embedded-Makler in Ihr IT -@BeforeClass
und@AfterClass
Methoden):EmbeddedAMQPBroker.java
:Integration test:
InformationsquelleAutor Timi
Ich bin mir nicht bewusst, irgendwelche embedded-RabbitMQ-Server, so dass ich denke, Sie haben ein paar Optionen zur Umgehung dieser:
Ihre RabbitMQ-server muss nicht vorhanden sein, auf Ihre CI-server, Sie bringen einen neuen server, der Ihren CI-rabbitmq-server. Wenn Sie sich nicht um einen selbst, man konnte sich in CloudAMQP. Das Kostenlose nutzungskontingent heute bietet: 1M-Nachrichten pro Monat, 20 gleichzeitige verbindungen, 100 Warteschlangen, mehr als 10.000 Nachrichten in der Warteschlange. Könnte genug sein für Ihren CI-Prozess.
Wenn Ihr die Prüfung wird nur durchgeführt unit-tests für RabbitMQ könnten Sie mock aus Ihrer RabbitMQ-message-Produktion. Dies ist, was, die wir tun einige unserer unit-tests. Wir überprüfen, ob eine bestimmte operation vornehmen, die den Aufruf der Methode zum erzeugen einer bestimmten Nachricht, aber wir verspotten diese aus, so dass wir eigentlich nicht veröffentlichen, eine Nachricht. Dann testen wir jedes der Verbraucher, indem Sie ausdrücklich den Aufruf des Verbraucher-Methoden mit einer bestimmten Nachricht, die wir erstellt haben.
InformationsquelleAutor Ian Dallas
Können Sie versuchen,Apache QPid Java-broker. Dies kann verwendet werden als eingebettete broker.
Setup in Scala ist beschrieben in dem anderen Frage - Beispiel für standalone-Apache Qpid (amqp) Junit Test
InformationsquelleAutor Arnost Valicek