Arvutiteaduse instituut
  1. Kursused
  2. 2023/24 kevad
  3. Ettevõttesüsteemide integreerimine (MTAT.03.229)
EN
Logi sisse

Ettevõttesüsteemide integreerimine 2023/24 kevad

  • Home
  • Lectures
  • Practicals
  • Assignements
  • Project and exam
  • Message Board

Session 6.1: Microservices – API Gateway

1. Clone the week7 branch of the course repository

$ git clone https://github.com/M-Gharib/ESI-W6.git

Note: if you want to create a new Spring Boot project from scratch, you need to install the following dependencies for both the Product and Inventory services:

  • Spring Web
  • Spring Data JPA SQL
  • PostgresSQL Driver SQL
  • Lombok
  • Spring Reactive Web
  • Validation I/O
  • Eureka Discovery Client
  • Cloud Loadbalancer

For the Discovery service, you need to install the following dependencies:

  • Lombok
  • Eureka Server

For the API Gateway, you need to install the following dependencies:

  • Gateway - Spring Boot Routing
  • Eureka Discovery Client

The project you cloned is composed of four different Spring Boot projects that represent two different microservices, a discovery server (the same as last week), and a service to work as our API Gateway. Without the API Gateway service, the application "architecture" is shown in the following diagram.

Implementing Spring Cloud API Gateway

1. the API Gateway has already been created as a Spring Boot project for this application, but you still need to register it with your discovery server, uncomment the @EnableDiscoveryClient annotation above the main class of the ApiGatewayApplication, and check the configurations for registering with the discovery server in application.properties.

server.port=8080
spring.application.name=api-gateway
spring.cloud.discovery.enabled=true

eureka.client.serviceUrl.defaultZone  = http://localhost:8761/eureka
eureka.client.instance.preferIpAddress = true

2. Run the discovery server. Then, run product-service, inventory-service. When you have services that need to register with a discovery server, they need to find it. That is why we run discovery server first. discovery server should run on port 8761. You can visit http://localhost:8761/ to see which services are registered with it (under "Instances currently registered with Eureka ").

3. Send the following request, in RestClientFile.rest. It should work.

### Get All products
GET http://localhost:8082/api/products 

Now, we need to configure our API Gateway so requests for our services will be passed through it.

4. The routes for the discovery server and product-service are already defined in the application.properties of the API Gateway, you just need to uncomment them, and your teacher will describe them for you.

...
################ Discover Server #####################
# spring.cloud.gateway.routes[0].id=discovery-server
# spring.cloud.gateway.routes[0].uri=http://localhost:8761
# spring.cloud.gateway.routes[0].predicates[0]=Path=/eureka/web
# spring.cloud.gateway.routes[0].filters[0]=SetPath=/

####### product-service ##############
# spring.cloud.gateway.routes[1].id=product-service
# spring.cloud.gateway.routes[1].uri=http://localhost:8082/
# spring.cloud.gateway.routes[1].predicates[0]=Path=/api/products/**
...

5. After uncommenting the routes configurations, run your services again, visit http://localhost:8761/ to be sure that all your services are registered with the discovery service, as follows:

6. Send the following requests, in RestClientFile.rest. Both should work and return the same result.

### Get All products
GET http://localhost:8082/api/products 

### Get All products - port 8080
GET http://localhost:8080/api/products 

7. Based on what you have learned, define the routes for the inventory-service in the application.properties of the API Gateway service. Then, send the following requests, in RestClientFile.rest. Both should work and return the same result.

### Get a quantity of a product based on its code  - port 8083 
GET http://localhost:8083/api/inventory/p-109-09

### Get a quantity of a product based on its code- port 8080 - API
GET http://localhost:8080/api/inventory/p-109-09

By now, the "architecture" of our application should be like the following diagram.

  • Arvutiteaduse instituut
  • Loodus- ja täppisteaduste valdkond
  • Tartu Ülikool
Tehniliste probleemide või küsimuste korral kirjuta:

Kursuse sisu ja korralduslike küsimustega pöörduge kursuse korraldajate poole.
Õppematerjalide varalised autoriõigused kuuluvad Tartu Ülikoolile. Õppematerjalide kasutamine on lubatud autoriõiguse seaduses ettenähtud teose vaba kasutamise eesmärkidel ja tingimustel. Õppematerjalide kasutamisel on kasutaja kohustatud viitama õppematerjalide autorile.
Õppematerjalide kasutamine muudel eesmärkidel on lubatud ainult Tartu Ülikooli eelneval kirjalikul nõusolekul.
Courses’i keskkonna kasutustingimused