title: “Using Zuul for Edge Service” lang: en ref: edging-service-zuul permalink: /docs/users/edging-service/zuul/ excerpt: “Using Zuul for Edge Service” last_modified_at: 2017-08-15T15:01:43-04:00 redirect_from:
{% include toc %}
An API Gateway is a server and the only node through which you can access the system. API Gateway encapsulates the internal system architecture and provides APIs for clients.
Zuul is a JVM-based router and server load balancer of Netflix. You can use Zuul to perform the following operations:
This section describes how to use Zuul as the API Gateway in the Spring Boot application. For details about Zuul, see Router and Filter: Zuul.
Use Zuul as the API Gateway, that is, establishes a Zuul Proxy application. In this proxy application, a unified access of all the microservices is defined, and each microservice is distinguished using a prefix (stipped). This section establishes the ZuulProxy Spring Boot application to demonstrate the API Gateway function.
In this section, demos, such as ZuulProxy and ZuulServer, are based on Spring Boot and the Java Chassis framework. For detals, see Integrating Spring Boot into Java Chassis.
This topic describes how to start a ZuulProxy application as the API Gateway. Perform the following steps:
Step 1 Add the following dependency to the POM file.
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-zuul</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-ribbon</artifactId> </dependency><dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-hystrix</artifactId> </dependency> <dependency> <groupId>org.apache.servicecomb</groupId> <artifactId>spring-boot-starter-discovery</artifactId> </dependency>
Step 2 Add annotations to the main Spring Boot category:
@SpringBootApplication @EnableServiceComb @EnableZuulProxy//new Annotation public class ZuulMain{ public static void main(String[] args) throws Exception{ SpringApplication.run(ZuulMain.class, args); } }
Step 3 Define a routing policy in the application.yaml file
server: port: 8754 #api gateway service port number zuul: routes: #Routing policy discoveryServer: /myServer/** #Routing rule
The configuration item in ted indicates that the configuration can be performed based on the actual development environment. For details about the rules for defining routing policies of zuul.routers, see:Router and Fillter: Zuul to control routes in a finer granularity.
Step 4 Define the microservice attributes in the microservice.yaml fiel.
APPLICATION_ID: discoverytest #Service ID service_description: name: discoveryGateway #Service Name version: 0.0.2 #Service Version servicecomb: service: registry: address: http://127.0.0.1:30100 #Service Center registration rest: address: 0.0.0.0:8082 #(Optional) microservice port number
All the services used in this section use the local service center. For details, see Starting the Local Service Center。
Before using the API Gateway provided by Zuul, start the microservice provider defined in zuul.routers.
Pay attention to the following points in the microservice.yaml file:
APPLICATION_ID must be the same as that defined in ZuulProxy.
The value of service_description.name must be the same as that of zuul.routers
An example is as follows:
APPLICATION_ID: discoverytest #same as ZuulProxy service_description: name: discoveryServer #Service name, which corresponds to that of zuul.routers version: 0.0.2 servicecomb: service: registry: address: http://127.0.0.1:30100 #Service Center registration rest: address: 0.0.0.0:8080
The portal for API Gateway is: http://127.0.0.1:8754. All services defined in zuul.routers can be accessed through this portal. The access rule are as follows:
http://127.0.0.1:8754/myServer/***](http://127.0.0.1:8754/myServer/***)
This indicates that HTTP calls [http://127.0.0.1:8754/myServer/*** to switch to the discoveryServer service. For example: “/myServer/101” switches to “/101” of discoveryServer service.
If multiple discoveryServer service (in different versions) exist in the Service Center, Zuul uses the Ribbon policy to transfer the request by default.