มาสร้าง CRUD Microservice ด้วย Micronaut กันเถอะ

Phayao Boonon
4 min readOct 6, 2018

--

ในปัจจุบัน JVM-base framework ที่ใช้สำหรับสร้าง Microservice นั้นมีมากมายและที่เป็นที่นิยมที่สุดก็คือ Spring framework และอื่นๆ แต่ก็มี framework ใหม่ๆ เกิดขึ้นตลอดเวลา และ framework ใหม่ก็มาแรงในช่วงนี้ก็คือ Micronaut ที่ทำให้สร้าง Application ได้ง่ายและข้อดีหลายอย่าง ดังนั้นในบทความนี้จะมาลองใช้ Micronaut ในการสร้าง CRUD Microservice

Micronaut คืออะไร

เป็น JVM-base framework สำหรับสร้าง lightweight, modular application พัฒนาโดย OCI บริษัทเดียวกันที่สร้าง Grails ซึ่ง Micronaut เป็น framework ล่าสุดที่ออกแบบเพื่อสร้าง microservice เร็ว และ ง่าย มาาาากๆ

Micronaut มีคุณสมบัติบางอย่าง ที่เหมือน framework ยอดนิยมอย่าง Spring และมีคุณสมบัติใหม่ๆ อีก โดยเฉพาะอย่างยิ่ง รองรับ Java, Grooby และ Kotlin ด้วย และมีหลายวิธีที่จะสร้าง application

คุณสมบัติหลัก

หนึ่งในคุณสมบัติที่สุดยอดของ Micronaut คือมีกลไลที่สามารถ inject dependency ในขณะ compile time ซึ่ง framework ส่วนใหญ่จะ reflection และ proxy ในตอน run time โดยที่ Micronaut จะ build dependency ของมันในตอน compile time ผลคือทำให้ application มีความเร็วกว่าในการเริ่มต้น (startup) และมีไฟล์ขนาดเล็กกว่า (memory footprints)

อีกหนึ่งคุณสมบัติคือมันเป็น first class รองรับ reactive programming สำหรับทั้ง client และ server และรองรับ reactive implementation อื่นได้ทั้ง RxJava และ Project Reactor

Micornaut มีหลากหลายคุณสมบัติที่ทำให้มันเป็น framework ที่สุดยอดสำหรับพัฒนา clould-native application โดยที่รองรับ service discovery ที่หลากหลาย อย่างเช่น Euraka และ Consul อีกทั้งทำงานได้กับ distributed tracining system ที่แตกต่างกันได้ อย่างเช่น Zipkin และ Jaeger

มาเริ่มกันเลย

ก่อนอื่นจะต้องติดตั้ง Micronaut ก่อน ซึ่งสามารถติดตั้งได้ด้วย SDKMAN ด้วยคำสั่ง

$ sdk install micronaut 

อย่าลืมติดตั้ง SDKMAN กันก่อนนะครับ

ซึ่งการติดตั้งจะติดตั้ง binary file ทั้งหมดที่จำเป็นสำหรับการ build, test และ deploy Micronaut applicatoin โดยจะมี CLI มาให้ที่จะทำให้ง่ายต่อการสร้างโปรเจคใหม่

วางแผนกันก่อน

CRUD Microservice ที่จะสร้างขึ้นเป็นเป็น Microservice ที่เก็บข้อมูลของ Customer ดังนั้น จะมี endpoint ที่ดำเนินการกับ customers resource ดังนี้

  • GET /customers — เรียกดูรายการ Customer ทั้งหมด
  • GET /customers/{id} — เรียกดู Customer โดย user id
  • POST /customers — สร้าง Customer ใหม่
  • PUT /customers/{id} — แก้ไข Customer โดย user id
  • DELETE /customers/{id} — ลบ Customer โดย user id

สร้าง Micronaut Project

มาเริ่มสร้างโปรเจคกันด้วย Micronaut CLI ดังนี้

$ mn create-app com-iphayao-microservice-demo
| Generating Java project.....
| Application created at .../com-iphayao-microservice-demo

โดยคำสั่งนี้จะสร้าง Micronaut project ที่ชื่อว่า com-iphayao-microservice-demo ซึ่งจะสร้าง package com.iphayao.microservice.demo ให้ที่เป็น Gradle project เป็นค่าเริ่มต้น แต่เราก็สามารถเลือกใช้ Maven ก็ได้เช่นกัน

และเปิดโปรเจคโดยใช้ IDE นั้นก็คือ IntelliJ IDEA

เพิ่ม dependency ของ Hibernate และ H2 ใน build.gradle เพื่อใช้ H2 local database และ ORM ด้วย Hibernate

compile "io.micronaut.configuration:hibernate-jpa"
compile "io.micronaut.configuration:hibernate-validator"
compile "io.micronaut.configuration:jdbc-hikari"
runtime "com.h2database:h2:1.4.196"

เนื่องจากจะใช้งาน H2 local database จะต้อง config datasource และ jpa ในไฟล์ application.yml ดังนี้

สร้าง Customer Entity

เป็น data model สำหรับ Customer

สร้าง Repository Access

โดยสร้าง interface เพื่อระบุ operation สำหรับ access ไปที่ Database

และสร้าง implementation ของ CustomerRepository

สร้าง Customer Controller

สร้าง Controller เพื่อรับ request method ต่างๆ โดยที่เรียก CustomerRepository ครอบคลุม CRUD operation

ซึ่ง Micronaut จะ inject CustomerRepository ให้ในตอน compile time ผ่าน constructor ของ CustomerController และใช้ใน method อื่นๆ

ลอง Run Application

หลังจากที่ได้สร้างส่วนต่างๆ ของ application ไปแล้ว ก็ลอง run application ที่เป็น gradle ด้วยคำสั่ง ./gradlew run

จะเห็นได้ว่า Micronaut จะรันผ่าน random port ดังนั้นเพื่อ fix port สามารถ config ได้ใน application.yml ด้วยการ uncomment ส่วนของ server

และรอง run ใหม่จะเห็นได้ว่าจะ fix port เป็น 8080

ทดสอบ Microservice

หลังจาก run application แล้วก็มาลองใช้ Postman ทดสอบว่าทำงานได้ตามที่ต้องการไหม โดย request ไปที่ http://localhost:8080/customers ด้วย body ที่เป็นข้อมูลของ customer

POST /customers
GET /customers/1
PUT /customers/1
DELETE /customers/1

สรุป

จาก Micronaut Microservice (Application) ที่เราได้สร้างขึ้นนั้นทำงานได้เป็นอย่างที่เราวางแผนไว้ ซึ่งการใช้ Micronaut framework นั้นดูแล้วจะง่ายกว่า Spring Boot พอสมควร เพราะใช้ annotation น้อยกว่าและชื่อของ annotation ก็กระชับกว่ามาก แต่สำหรับ Database access application นั้น Micronaut ไม่ได้รองรับมากเท่ากับ Spring framework ที่มี Spring Data ที่มี boilerplate code สำหรับ implementation แบบง่าย ทำให้ต้อง implement Repository ขึ้นมาเอง แต่อย่างไรก็ตาม Micronaut เป็น framework น้องใหม่ที่มาแรงและอาจจะแรงมากๆ ในอนาคตแน่นอน

--

--

Phayao Boonon
Phayao Boonon

Written by Phayao Boonon

Software Engineer 👨🏻‍💻 Stay Hungry Stay Foolish

No responses yet