Publish through Multiple API Gateways
You can configure multiple API Gateway environments in WSO2 API Manager that publish to a single API Store when you require distributing the gateway load comes in. It helps you to distribute the API Gateway load to multiple nodes and also gives you some logical separation (e.g., production vs. sandbox) between the APIs in the API Store. When you publish an API through multiple Gateway environments, the APIs in the API Store will have different server hosts and ports.
The steps below explain how to configure and publish to multiple Gateways. In this guide, we set up 3 API Manager instances in the same server. In a typical production environment, the Gateways will ideally be in separate servers.
- Instance 1: Acts as the node that provides the API Publisher, Store and the Key Manager functionality.
- Instance 2: Acts as a production Gateway node.
- Instance 3: Acts as a sandbox Gateway node.
Copy the API Manager product pack in to 3 separate folders.
Let's add offsets to the default ports of the two Gateway instances. A port offset ensures that there are no port conflicts when more than one WSO2 product runs on the same server.Open theÂ
<APIM_HOME>/repository/conf/carbon.xml
 file in the second API Manager instance and add an offset of 1 to its default port. This increments its default server port, which is 9443, by 1.<Offset>1</Offset>
 Open theÂ
<APIM_HOME>/repository/conf/carbon.xml
 file in the third API Manager instance and add an offset of 2 to its default port. This increments its default server port, which is 9443, by 2.<Offset>2</Offset>
The thrift server should be disabled in the two Gateway instances.
Open theÂ
<APIM_HOME>/repository/conf/api-manager.xml
 files in the second and the third API Manager instances and set the<EnableThriftServer>
 property to false. For example:<EnableThriftServer>false</EnableThriftServer>
The two Gateway instances need to communicate with the Key Manager in the first API Manager instance.Â
Open the
<APIM_HOME>/repository/conf/api-manager.xml
 files in the second and the third Gateway instances and change the following:<AuthManager> <ServerURL>https://<IP of the first instance>:9443/services/</ServerURL> <Username>admin</Username> <Password>admin</Password> ... </AuthManager> ... <APIKeyValidator> <ServerURL>https://<IP of the first instance>:9443/services/</ServerURL> <Username>admin</Username> <Password>admin</Password> .... <RevokeAPIURL>https://<IP of the first instance>:8243/revoke</RevokeAPIURL> </APIKeyValidator>
You are done configuring the two API Gateway instances. Let's point to them from the first instance.
Open theÂ
<APIM_HOME>/repository/conf/api-manager.xml
file in the first API Manager instance, add two API Gateway environments under theÂ<Environments>
 element and delete the<environment>
element that comes by default. For example:<Environments> <Environment type="production"> <Name>Production Gateway</Name> <Description>Production Gateway Environment</Description> <ServerURL>https://localhost:9444/services/</ServerURL> <Username>admin</Username> <Password>admin</Password> <GatewayEndpoint>http://localhost:8281,https://localhost:8244</GatewayEndpoint> </Environment> <Environment type="sandbox"> <Name>Sandbox Gateway</Name> <Description>Sandbox Gateway Environment</Description> <ServerURL>https://localhost:9445/services/</ServerURL> <Username>admin</Username> <Password>admin</Password> <GatewayEndpoint>http://localhost:8282,https://localhost:8245</GatewayEndpoint> </Environment> </Environments>
Tip: The Gateway environment names must be unique.
Tip: The environments you add here will be visible in a drop-down list in the API Console tab of the API Store. It allows subscribers to send API requests to any selected Gateway.Â
To stop a given Gateway environment from being displayed in the API Console tab, you can set theÂ
api-console
 attribute toÂfalse
 in the<environment>
 element in theÂapi-manager.xml
file. For example,Â<Environment type="production" api-console="false">
.- Start all instances.
- Log in to the API Publisher (first instance) and choose to edit an API.
- Navigate to the Manage tab, expand the Gateway Environments section and note the two Gateway environments listed there.
In a typical production setup, you will publish the API to the sandbox Gateway first and then publish it to the production Gateway. In this case, let's publish to both. - Select both Gateways and Save and Publish the API.
- Log in to the API Store (of the first instance) and click the API to open it.
- In the API's Overview tab, note that it has two sets if URLs for the two Gateway instances:
If you have published your API through more than one Gateway,
When you have generated keys for the Applications, the sample cURL command shows how to generate an access token using the Password Grant type provides the Gateway URL of the first published Gateway Environments listed in API Publisher as shown in the step 10.
Change this gateway URL according to the Gateway that you want to publish the API if you are using this Curl command to generate acces tokens.