Spring Cloud Gateway สำหรับผู้เริ่มต้น

Sharing is caring!

Spring Cloud Gateway: ตั้งค่าแบบ YML และ Custom Route ด้วย Java

Spring Cloud Gateway คืออะไร?

Spring Cloud Gateway เป็น API Gateway ที่ทำหน้าที่เป็นประตูหน้าบ้าน (entry point) สำหรับระบบ microservices ช่วยในการกำหนดเส้นทาง (Routing), แทรกตัวกรอง (Filter), ตรวจสอบความปลอดภัย, และจัดการโหลดแบบ reactive บนพื้นฐานของ Spring WebFlux

จุดเด่นของ Spring Cloud Gateway คือการรองรับ reactive programming เต็มรูปแบบ รองรับ scalability สูงและ latency ต่ำ เหมาะกับระบบที่ต้องรับส่งคำร้องพร้อมกันจำนวนมาก

การกำหนด Route ใน Spring Cloud Gateway

Spring Cloud Gateway รองรับการตั้งค่า route ได้ 2 รูปแบบหลัก ๆ คือ:

  • 1. กำหนดด้วยไฟล์ application.yml (เหมาะสำหรับ static route)
  • 2. เขียนด้วย Java Configuration (เหมาะสำหรับ dynamic หรือ logic-based route)

1. การตั้งค่าแบบ YML (Static Route)

เหมาะสำหรับระบบที่มี route คงที่ เปลี่ยนแปลงไม่บ่อย อ่านง่าย และจัดการในรูปแบบ declarative

spring:
  cloud:
    gateway:
      routes:
        - id: customer_route
          uri: http://localhost:8081
          predicates:
            - Path=/api/customers/**
          filters:
            - AddRequestHeader=X-Request-Foo, Bar
        - id: order_route
          uri: http://localhost:8082
          predicates:
            - Path=/api/orders/**

ข้อดีของการใช้ YML

  • แยกความรับผิดชอบระหว่าง config กับ logic
  • ง่ายต่อการ deploy บนระบบ CI/CD
  • สามารถตรวจสอบ/เปลี่ยน config โดยไม่ต้องแก้ไข code

ข้อเสียของการใช้ YML

  • ต้อง restart application ทุกครั้งเมื่อมีการเปลี่ยนค่า
  • ไม่สามารถกำหนด routing logic ที่ซับซ้อนได้

2. การตั้งค่าแบบ Java Code (Dynamic Route)

เหมาะกับ use case ที่ routing มีเงื่อนไขซับซ้อน เช่น การอ่านค่าจากฐานข้อมูล, ใช้ environment variable, หรือ routing ตาม header/payload แบบ runtime

@Configuration
public class GatewayRoutes {

  @Bean
  public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
    return builder.routes()
      .route("customer_route", r -> r
        .path("/api/customers/**")
        .filters(f -> f.addRequestHeader("X-Request-Foo", "Bar"))
        .uri("http://localhost:8081"))
      .route("order_route", r -> r
        .path("/api/orders/**")
        .filters(f -> f.addRequestParameter("orderId", "999"))
        .uri("http://localhost:8082"))
      .build();
  }
}

ข้อดีของ Java Config

  • ควบคุม logic ได้อย่างละเอียด
  • สามารถเขียน route แบบ dynamic ตาม context ที่เปลี่ยนแปลงได้
  • ใช้ร่วมกับ Java bean อื่น ๆ ได้ง่าย เช่น service, repository

ข้อเสียของ Java Config

  • ไม่เหมาะกับทีม DevOps ที่ไม่ใช่นักพัฒนา
  • ต้อง compile ใหม่ทุกครั้งเมื่อมีการเปลี่ยน route

เปรียบเทียบ YML vs Java Route

หัวข้อ YML Config Java Code
ความง่ายในการอ่าน ✅ ง่าย ⚠ ต้องมีพื้นฐาน Java
ความยืดหยุ่น ⚠ จำกัด ✅ สูง
เหมาะกับ dynamic logic
สามารถใช้ร่วมกับ bean/service
ต้อง build ใหม่เมื่อเปลี่ยน route ไม่ต้อง ต้อง

บทส่งท้าย

หากระบบของคุณมีเส้นทางการเรียกบริการ (routing) คงที่และไม่เปลี่ยนแปลงบ่อย การใช้ YML จะช่วยให้ระบบสะอาดและง่ายต่อการดูแล
แต่หากคุณต้องการความยืดหยุ่นและสามารถประมวลผล routing logic ที่ซับซ้อนได้ การใช้ Java Config จะช่วยให้คุณควบคุม gateway ได้อย่างเต็มที่

แนะนำ: สำหรับระบบที่ซับซ้อน ใช้ร่วมกันทั้ง 2 รูปแบบได้ โดยกำหนด default route ใน YML และ override บางส่วนด้วย Java

Leave a Reply

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *