Copyright (c) 2019 California Community Colleges Technology Center Licensed under the MIT . A copy of this may be found at https://opensource.org/licenses/mit-license.php
This module is part of the API Gateway.
The service-conductor module extends the Netflix Conductor OSS package. Netflix Conductor is the workflow engine that provides queues, scheduling, load balancing, monitoring and exception handling for calls to microservices.
Instructions and pre-requisites for running these services together can be found in the overall API Gateway documentation here: development-environment.
Local Development Setup
- The ssh private key is set locally when running build.sh in Step 3 during "Building and Running service-conductor Locally" or with the below command.
- Additional configuration for our custom integrations are outlined in Conductor-Customization.
- Refer to the Netflix docs for general configuration of Conductor.
Follow the steps below to get service-conductor working locally.
Step 1. Set your AWS credentials into the local environment using the following:
export AWS_ACCESS_KEY_ID="...your aws key..." export AWS_SECRET_ACCESS_KEY="...your aws secret..."
You must provide credentials to access the configured SQS Queues running on AWS. See the AWS Security Credentials page for more information on getting your keys.
If you need a CCCTC AWS account set up because you don't have one, submit a request to Infiniti at: https://infiniticg.zendesk.com/).
Step 2. If you need to incorporate scheduling support:
Use the CCCTC Crontab service. Conductor has no built in scheduling system.
Step 3. Set Slack notifications:
To incorporate the notification workflow that runs periodically to find FAILED workflows use one of the two following options for local development:
Set up a Slack webhook to send to your private channel in Slack (so that only you can see your annoying tests).
Follow directions here: https://api.slack.com/incoming-webhooks
Once you have your URL, add it to your environment:
export SLACK_NOTIFICATION_API=(your url)
- As an alternative to the above, contact Ben Stout to get access to the shared devops Slack webhook and add it to your bash profile.
Step 4. To work with SQS queues and event messages:
To maintain message order (FIFO), we should use a FIFO SQS queue, not the "standard" queue.
For testing an SQS queue, Conductor will subscribe to a queue linked to the movies test service. The queue is configured in Docker with the property.
To subscribe to events, a Conductor event handler must be defined for the queue as seen in 7-events.sh.
The queue name must end in '.fifo' and refer to a FIFO queue
If the queue doesn't exist on AWS, we'll create the queue with default config
Building and Running service-conductor
You can run service-conductor locally using one of the two following methods:
Docker and the CCCTC Private Registry, or
Build and run the Docker images locally
Pulling and Running service-conductor Locally Using the CCCTC Private Registry
Use the instructions below to run and build service-conductor using the CCCTC private registry.
Prerequisite Follow the instructions on adding your user / pass to the registry here to set your credentials for pulling from the CCCTC private registry.
Step 1. To allow multiple services to communicate with each other, they must all join the same Docker network. Ensure the 'ccctc' network is created locally by running the below:
docker network create ccctc
Step 2. Use the following command if you have NOT built the images locally but want to pull already-built images:
Note: You can then switch back to local images with:
Step 3. Login to the CCCTC Docker registry:
docker login registry.ccctechcenter.org:5000
Step 4. Use the following command in the root directory to run Conductor locally using the CCCTC base image:
./build.sh local restart
Step 5. After running the above docker-compose command you can CTRL-C to stop the service-conductor processes. To ensure proper cleanup, follow that with:
Building and Running service-conductor Locally
See below on how to build and run images locally.
Step 1. To allow multiple services to communicate with each other the services must all join the same Docker network. Ensure the 'ccctc' network is created locally by running the below:
docker network create ccctc
Step 2. Build the conductor-server image (with your changes) by executing the following build script from the module root directory:
This packages all the workflows, configs and scripts into an image you can run locally. Normally, we run Conductor as a Docker image only.
Note: You may also want to build and restart just conductor-server, which can be done with this command:
./build.sh local restart
Running Conductor locally
After building the images locally, use the following command in the root directory to run Conductor locally:
After running the above docker-compose command, you can CTRL-C to stop the service-conductor processes. To ensure proper cleanup, follow that with:
Netflix OSS Base Image
|Netflix forked code||https://github.com/ccctechcenter/conductor|
|Docker hub images||https://hub.docker.com/repository/docker/ccctechcenter/conductor|
Docker images are auto built when a tag matching the pattern *.RELEASE is pushed to above fork.
This repo uses the
The steps below outline how to use a new Docker Hub image.
For this service-conductor repo, create a branch as usual, i.e., feature/CONDUCTOR-283_upgrade-conductor
After validating in CI, create a pull request and merge into develop as normal.
Finally, modify the service-router and service-worker POM files to use the new conductor library version on maven central.
See Conductor-Customization for adding new features and extending the base image.
- The server API and swagger are accessible from: http://localhost:8080/
- The UI is available at: http://localhost:80/
- see wiki
Sentry IO is error tracking software that has been integrated in the project. The integration relies on the existence of an environment variable SENTRY_DSN (the data source name). The data source name is a URL that provides endpoint information to the sentry IO subsystem. When the environment variable is not present, the Sentry IO subsystem is completely disabled.