Here we will learn, how to create API gateway using Spring cloud API. We will also register it with discovery/ registry server. Also will see how to access microservice using registry server through API gateway.
API gateway can be implemented two ways, one is using Zuul proxy and second is using spring cloud API gateway. Difference between them is blocking and non-blocking. Spring cloud API gateway is non-blocking implementation and can support many more requests at same time compare to zuul proxy implementation. In this example I am going to use Spring cloud API gateway for our API gateway implementation.
Below are the required code and configurations.
Spring boot main class
Application configuration
Below configuration is registering it with Eureka registry/ discovery server.
URL: http://localhost:9999/users/
https://github.com/thetechnojournals/microservices/tree/master/api-gateway
What is API gateway
As its name implies, API gateway is the single entry-point to an application or system. It can handle a request and invoke the appropriate service registered with it. It provides many features like protocol translation, filtering, security, interceptors etc. Using API gateway we can invoke any microservice whether its direct invocation or using some registry/ discovery server to invoke registered services using their ID.Creating API gateway
In our example we will create an API gateway which will register itself with Eureka discovery server and will invoke the microservice available in discovery server using its registered service ID.API gateway can be implemented two ways, one is using Zuul proxy and second is using spring cloud API gateway. Difference between them is blocking and non-blocking. Spring cloud API gateway is non-blocking implementation and can support many more requests at same time compare to zuul proxy implementation. In this example I am going to use Spring cloud API gateway for our API gateway implementation.
Below are the required code and configurations.
- Maven dependencies
<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-gateway</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
@SpringBootApplication public class ApiGatewayApplication { public static void main(String[] args) { SpringApplication.run(ApiGatewayApplication.class, args); } }
server.port: 9999 eureka: client: registerWithEureka: true serviceUrl: defaultZone: http://localhost:8089/eureka healthcheck: enabled: trueBelow configuration is required to create routes for services registered with discovery server.
spring.cloud.gateway.discovery.locator.enabled: trueBelow configurations define the name for application and a route for our microservice. Here you can see that API gateway doesn't need to know the network location of microservice but it needs registered ID with discovery server. Here we define the predicates to invoke specified services.
spring: application.name: api-gateway cloud: gateway: routes: - id: UserManagementService uri: lb://USERMANAGEMENTSERVICE predicates: - Path=/users/**
Creating Registry/ Discovery server
Please refer below post for discovery server tutorial and source code.
Creating Microservice
Please refer below post for developing microservice and source code.
Running and Testing API gateway
Before starting the API gateway application please make sure that discovery server is up and running. You can run below command to start the API gateway application in project's root directory.mvn spring-boot:runNow you can access below URL in browser and you will see the result as given in below screenshot.
URL: http://localhost:9999/users/
Source code
Complete source code is available in below Git location.https://github.com/thetechnojournals/microservices/tree/master/api-gateway
It is quite helpful that you have offered this information on your blog. We sincerely appreciate the effort you put into your article, and it helps us, too. Thank you for sharing this information.hire laravel developers
ReplyDeleteA very thorough article about.....has been supplied by you. It's a great article for me and for those who...... We appreciate you sharing this knowledge with us.electronic signature
ReplyDelete