In this tutorial, we are going to create a backend service and start three instances to demo the light-proxy load balance between them.
The backend service will have two endpoints: one get and one post to demo different scenarios in term of proxy functionality. This server is built on top of light-rest-4j with OpenAPI 3.0 specification.
There is another backend service that is built on top of Swagger 2.0 specification for users who are still working on Swagger 2.0 specification for some reason.
Backend service specification and light-codegen config.json
You can find the OpenAPI 3.0 specification and config.json in model-config
Regarding how to create OpenAPI 3.0 Specification, please refer to swagger editor
Generate the backend service
Given the OpenAPI specification and config.json, we are going to use light-codegen to generate the project and update the service with a meaningful response based on the specification.
As you can see, the output contains information on which port the response is coming from, as we will start multiple instances of the backend for the proxy.
Start backend services
If you have multiple computers, you can start multiple instances that listening on the same port on each computer. Otherwise, start multiple instances that listening to different ports on one computer. Here we are going to start three instances on the same computer and let them listen to 8081, 8082 and 8083 on https. Let’s disable the HTTP for now as it is never used on production.
If you generate the proxy-backend service, you should have the project on your local light-example-4j/rest/openapi folder already. If not, let’s clone the repo and compile it locally.
git clone https://github.com/networknt/light-example-4j.git
In order to start three instances with different https ports, we need to overwrite the httpsPort in server.yml, which is located at proxy-backend/src/main/resources/config folder with an external values.yml file. The following is the default one generated based on the config.json file. As you can see, HTTP is disabled, and https is enabled and listen to 8443 port.
# Server configuration---# This is the default binding address if the service is dockerized.ip:0.0.0.0# Http port if enableHttp is true.httpPort:8080# Enable HTTP should be false on official environment.enableHttp:false# Https port if enableHttps is true.httpsPort:8443# Enable HTTPS should be true on official environment.enableHttps:true# Http/2 is enabled by default.enableHttp2:true# Keystore file name in config folder. KeystorePass is in secret.yml to access it.keystoreName:tls/server.keystore# Flag that indicate if two way TLS is enabled. Not recommended in docker container.enableTwoWayTls:false# Truststore file name in config folder. TruststorePass is in secret.yml to access it.truststoreName:tls/server.truststore# Unique service identifier. Used in service registration and discovery etc.serviceId:com.networknt.backend-1.0.0# Flag to enable service registration. Only be true if running as standalone Java jar.enableRegistry:false# environment tag that will be registered on consul to support multiple instances per env for testing.# https://github.com/networknt/light-doc/blob/master/docs/content/design/env-segregation.md# This tag should only be set for testing env, not production. The production certification process will enforce it.# environment: test1