Bạn có chắc chắn muốn xóa bài viết này không ?
Bạn có chắc chắn muốn xóa bình luận này không ?
[Spring clound] Bắt đầu với eureka server và dùng zuul làm service gateway
Microservices cái này hiểu theo cách cơ bản là chia module thành cách service nhỏ để thuận tiện cho việc vận hành, nâng cấp, bảo trì,....
Spring clound là một bộ thư viện nằm trong họ nhà spring giúp chúng ta xây dựng các ứng dụng microservices nó đơn giản hơn
Eureka server nó là Service discovery cho phép các service khi khởi chạy sẽ tự mình đăng ký thông tin lên đây. Khi service đăng ký thông tin lên đây thì từ service này gọi đến service kia sẽ gọi bằng tên của service chư không cần gọi qua ip với port của service kia nữa
Zuul Thế này nhé, mọi request đi vào hệ thống của mình đều phải qua cái thằng này, rồi nó mới đi tới instance thích hợp.
Cơ bản có thế thôi giờ mình bắt đầu nhé.
Tạo eureka server
- Đầy tiên thêm thư viên này này
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
-
File Application sẽ như này
@SpringBootApplication @EnableEurekaServer public class EurekaServerApplication { public static void main(String[] args) { SpringApplication.run(EurekaServerApplication.class, args); } }
Mặc đình thì eureka sẽ coi chính nó là một client
để bỏ đi thì trong application.properties như bên dưới
spring.application.name=eureka-server
server.port=8761
# hai dòng bên dưới sẽ không không coi eureka là một client nữa
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
như dưới hình là không còn eureka-server nữa rồi
Tạo thử một service con
- Theo lý thuyết thì mỗi service này sẽ một nghiệp vụ riêng như sản phẩm, tài khoản, thanh toán,.. nhưng vì trong cái demo này mình không có nghiệp vụ nào cả nên mình chỉ có tạo demo service
- Cần 2 thư viện này để mình tạo ra cái api và đăng ký với eureka server đã tạo ở bên trên
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
- Trong class application chỉ cần 1 cái annotation để bảo là đây là eureka client
@SpringBootApplication
@EnableEurekaClient
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
- Rồi trong application.properties ta cần thêm cái địa chỉ của eureka server nữa là được,
spring.application.name=demo-service
server.port=9000
eureka.client.service-url.default-zone=http://localhost:8761/eureka
để gọi chéo giữa các service trong cùng 1 eureka server bạn chỉ cần gọi qua tên là được, như cái service vừa tạo đây là demo-service chứ không cần phải gọi qua ip nữa.
- Rồi mình cũng tạo 1 api để test
@RestController
public class Controller {
@RequestMapping({"","/"})
public ResponseEntity<String> hello(){
return ResponseEntity.ok("Xin chào");
}
}
Tạo gateway service
- Như ở phần giới thiệu là mình sẽ sử dụng netflix zuul nên mình cần có 2 thư viện sau
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-zuul</artifactId>
</dependency>
- Trong class application thì ta cần phải giớ thiệu là đây cũng là eureka client và gateway service dùng zuul nữa
@SpringBootApplication
@EnableEurekaClient
@EnableZuulProxy
public class GatewayServiceApplication {
public static void main(String[] args) {
SpringApplication.run(GatewayServiceApplication.class, args);
}
}
- Rồi sang application.properties ta cần 1 vài dòng để biết zuul này biết đến thằng demo service mình đã viết ở trên
server.port=9981
spring.application.name=gateway-service
eureka.client.service-url.default-zone=http://localhost:8761/eureka/
zuul.ignored-services=*
zuul.routes.demo-service.path=/demo/**
zuul.routes.demo-service.service-id=demo-service
về cơ bản nó chỉ như này thôi. Những request bên ngoài hệ thống sẽ phải qua zuul rồi mới tới api cần tới, chứ không thể gọi thẳng đến service luôn được. Ví dụ cái api demo của mình thì sẽ gọi như này
Tổng kết
- Cơ bản là mình đã vừa tạo 1 demo về các dùng cơ bản netflix eureka server cùng netflix zuul, hi vọng nó có giúp ích gì đó cho các bạn.
- Về bài viết có gì thiếu sót các bạn comment góp ý giúp mình với nhé
- Đây là toàn bộ source bài này https://github.com/hunghhdev/guide/tree/master/spring-boot/spring-clound-first
- Cảm ơn các bạn đến đây, mình xin cảm ơn nhé




