Erstellen eines Microservice mit Apache Meecrowave

Erstellen eines Microservice mit Apache Meecrowave

**

1. Überblick

In diesem Tutorial werden die grundlegenden Funktionen des ApacheMeecrowave-Frameworks erläutert.

Meecrowave is a lightweight microservices framework from Apache, was sehr gut mit CDI-, JAX-RS- und JSON-APIs funktioniert. Es ist sehr einfach einzurichten und bereitzustellen. Außerdem entfällt der Aufwand für die Bereitstellung schwerer Anwendungsserver wie Tomcat, Glassfish, Wildfly usw.

2. Maven-Abhängigkeit

Um Meecrowave zu verwenden, definieren wir die Abhängigkeit inpom.xml:


    org.apache.meecrowave
    meecrowave-core
    1.2.1

Suchen Sie nach der neuesten Version vonMaven Central.

3. Starten eines einfachen Servers

Um einen Meecrowave-Server zu starten, müssen wir nur diemain method,create a Meecrowave instance and invoke the main bake() method schreiben:

public static void main(String[] args) {
    try (Meecrowave meecrowave = new Meecrowave()) {
        meecrowave.bake().await();
    }
}

Wir benötigen diese Hauptmethode nicht, wenn wir die Anwendung als Distributionspaket verpacken. Wir werden uns das in den späteren Abschnitten ansehen. Die Hauptklasse ist nützlich, wenn Sie die Anwendung von einer IDE aus testen.

Während der Entwicklung in einer IDE wird die Anwendung, sobald sie mit der Hauptklasse ausgeführt wird, automatisch mit Codeänderungen neu geladen, was den Aufwand erspart, den Server immer wieder neu zu starten und zu testen.

Beachten Sie, dass Sie bei Verwendung von Java 9 nicht vergessen müssen, der VM die Module von javax.xml.bindhinzuzufügen:

--add-module javax.xml.bind

Wenn Sie den Server auf diese Weise erstellen, wird er mit der Standardkonfiguration gestartet. Wir können die Standardkonfigurationen mithilfe derMeecrowave.Builder-Klasse: programmgesteuert aktualisieren

Meecrowave.Builder builder = new Meecrowave.Builder();
builder.setHttpPort(8080);
builder.setScanningPackageIncludes("com.example.meecrowave");
builder.setJaxrsMapping("/api/*");
builder.setJsonpPrettify(true);

Und verwenden Sie diesebuilder -Sinstanz, während Sie den Server backen:

try (Meecrowave meecrowave = new Meecrowave(builder)) {
    meecrowave.bake().await();
}

Es gibt mehr konfigurierbare Eigenschaftenhere.

4. REST-Endpunkte

Sobald der Server bereit ist, erstellen wir einige REST-Endpunkte:

@RequestScoped
@Path("article")
public class ArticleEndpoints {

    @GET
    public Response getArticle() {
        return Response.ok().entity(new Article("name", "author")).build();
    }

    @POST
    public Response createArticle(Article article) {
        return Response.status(Status.CREATED).entity(article).build();
    }
}

Beachten Sie, dass wir hauptsächlichJAX-RS annotations to create the REST endpoints verwenden. Lesen Sie mehr über JAX-RShttps://www.example.com/jax-rs-spec-and-implementations. [Hier].

Im nächsten Abschnitt erfahren Sie, wie Sie diese Endpunkte testen.

5. Unit Testing

Das Schreiben von Unit-Testfällen mit für REST-APIs, die mit Meecrowave geschrieben wurden, ist einfach wie das Schreiben von kommentierten JUnit-Testfällen.

Fügen wir die Testabhängigkeiten zuerst zu unserempom.xml hinzu:


    org.apache.meecrowave
    meecrowave-junit
    1.2.1
    test

Überprüfen SieMaven Central, um die neueste Version anzuzeigen.

Fügen wir außerdemOkHttp als HTTP-Client für unsere Tests hinzu:


    com.squareup.okhttp3
    okhttp
    3.10.0

Schauen Sie sich die neueste Versionhere an.

Nun, da die Abhängigkeiten vorhanden sind, können Sie die Tests schreiben:

@RunWith(MonoMeecrowave.Runner.class)
public class ArticleEndpointsTest {

    @ConfigurationInject
    private Meecrowave.Builder config;
    private static OkHttpClient client;

    @BeforeClass
    public static void setup() {
        client = new OkHttpClient();
    }

    @Test
    public void whenRetunedArticle_thenCorrect() {
        String base = "http://localhost:" + config.getHttpPort();

        Request request = new Request.Builder()
          .url(base + "/article")
          .build();
        Response response = client.newCall(request).execute();
        assertEquals(200, response.code());
    }
}

Stellen Sie beim Schreiben der Testfälle sicher, dass die Testklasse mit der KlasseMonoMeecrowave.Runnermit Anmerkungen versehen wird, und fügen Sie die Konfiguration ein, um Zugriff auf den von Meecrowave für den Testserver verwendeten zufälligen Port zu erhalten

6. Abhängigkeitsspritze

Zuinject dependencies into a class müssen wir diese Klassen innerhalb eines bestimmten Bereichs mit Anmerkungen versehen.

Nehmen wir das Beispiel einerArticleService -Skala:

@ApplicationScoped
public class ArticleService {
    public Article createArticle(Article article) {
        return article;
    }
}

Fügen wir dies nun mit der Annotation: vonjavax.inject.Injectin unsereArticleEndpoints-Instanz ein

@Inject
ArticleService articleService;

7. Verpacken der Anwendung

Das Erstellen eines Distributionspakets ist mit dem Meecrowave Maven-Plugin sehr einfach:


    ...
    
        
            org.apache.meecrowave
            meecrowave-maven-plugin
            1.2.1
        
    

Sobald wir das Plugin installiert haben, lassen Sie unsuse the Maven goal meecrowave:bundle to package the application.

Nach dem Packen wird eine Zip-Datei im Zielverzeichnis erstellt:

meecrowave-meecrowave-distribution.zip

Diese Zip-Datei enthält die für die Bereitstellung der Anwendung erforderlichen Artefakte:

|____meecrowave-distribution
| |____bin
| | |____meecrowave.sh
| |____logs
| | |____you_can_safely_delete.txt
| |____lib
| |____conf
| | |____log4j2.xml
| | |____meecrowave.properties

Navigieren Sie zum bin-Verzeichnis und starten Sie die Anwendung:

./meecrowave.sh start

So beenden Sie die Anwendung:

./meecrowave.sh stop

8. Fazit

In diesem Artikel haben wir gelernt, wie Sie mit Apache Meecrowave einen Microservice erstellen. Außerdem untersuchten wir einige grundlegende Konfigurationen der Anwendung und bereiteten ein Verteilungspaket vor.

Wie immer waren die Codefragmente inGithub Project zu finden.

**