Creating a Service with Micronaut
Micronaut is a framework on JVM to develop microservices and serverless (FaaS) based applications. Micronaut support Java, Groovy and Kotlin languages.
Let's quickly get our hands wet with creating a service using Micronaut.
Installing Micronaut CLI
If you are are on a *nix platform and not using SDKMAN, I highly recommend getting it installed. Use the following command to install SDKMAN.
$ curl -s "https://get.sdkman.io" | bash
Now install the Micronaut CLI
sdk install micronaut
Get into the Micronaut interactive shell using the mn
command.
| Starting interactive mode...
| Enter a command name to run. Use TAB for completion:
mn>
Scaffolding a project
Get into the Micronaut interactive shell and create the service using create-app
command followed by the service name, say "hello-service".
mn> create-app hello-service
| Generating Java project...
| Application created at /Users/naresha/practice/micronaut/ga/hello-service
| Initializing application. Please wait...
If everything goes fine, you should find the directory "hello-service" created with the following files. By default Micronaut creates a java project with gradle build. Gradle wrapper is also created for you - so you don't need have gradle pre-installed to build and run the project.
➜ hello-service tree
.
├── Dockerfile
├── build.gradle
├── gradle
│ └── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── micronaut-cli.yml
└── src
├── main
│ ├── java
│ │ └── hello
│ │ └── service
│ │ └── Application.java
│ └── resources
│ ├── application.yml
│ └── logback.xml
└── test
└── java
└── hello
└── service
12 directories, 10 files
Creating a controller
Micronaut default applications are HTTP based. We create controllers to handle HTTP methods. The CLI comes with a command to create controllers. Let's go ahead and create a controller.
mn> create-controller Hello
| Rendered template Controller.java to destination src/main/java/hello/service/HelloController.java
| Rendered template ControllerTest.java to destination src/test/java/hello/service/HelloControllerTest.java
Note that the CLI took care of suffixing 'Hello' with 'Controller' to create 'HelloController'. It also created a test class where you can write the tests. Let's see what is available in the generated controller.
package hello.service;
import io.micronaut.http.annotation.Controller;
import io.micronaut.http.annotation.Get;
import io.micronaut.http.HttpStatus;
@Controller("/hello")
public class HelloController {
@Get("/")
public HttpStatus index() {
return HttpStatus.OK;
}
}
Running your service
Without further delay, let's run our service. I will invoke the gradle wrapper script and invoke the 'run' task.
hello-service ./gradlew run
Starting a Gradle Daemon (subsequent builds will be faster)
> Task :compileJava
Note: Creating bean classes for 1 type elements
> Task :run
10:00:06.647 [main] INFO io.micronaut.runtime.Micronaut - Startup completed in 1103ms. Server Running: http://localhost:8080
The service is now running on port 8080. Let's call the service using the endpoint from the controller, which is mentioned in our controller as '/hello'.
➜ ~ curl -i http://localhost:8080/hello
HTTP/1.1 200 OK
Date: Tue, 9 Apr 2019 10:02:44 GMT
connection: keep-alive
transfer-encoding: chunked
Also, note the startup time. The server started in 1103ms, which included downloading several dependencies.
I will be exploring more of Micronaut in my upcoming posts.