Conductor: Remote Workers NOT Polling for Tasks

Created on 5 Sep 2019  路  5Comments  路  Source: Netflix/conductor

I have the below application setup.

1) Conductor Server - Cloud Container - No Security
2) Java Worker (Spring Boot) - Local Machine

Task is registered with Conductor no issues.
Task Def is created by calling API programatically no issues.

Workflow created by calling API from Postman.
Task Type is SIMPLE
task name is matching the registered task name.

Worker is NOT polling the Task.
It is forever in Scheduled status.

If I try to replicate the same by having the Conductor Server run in local docker container, there seems to be no issue.

There are no task domain used. A dummy worker which prints a line in console. A workflow without any input , just to have that one task.

Just a side note, a Python worker on the other hand is able to poll from local docker container as well as from cloud conductor container.

Worker Registration Code

logger.info("Registering Sub Workers ");

    TaskClient taskClient = new TaskClient();
    logger.info("Pointing to Conductor Server " + CONDUCTOR_SERVER_URL);
    taskClient.setRootURI(CONDUCTOR_SERVER_URL);        //Point this to the server API

    int threadCount = 2;            //number of threads used to execute workers.  To avoid starvation, should be same or more than number of workers


    Worker urlCheckerSubWorker = new URLCheckerSubWorker(TASK_CHECK_URLS, WORKER_NAME);
    Worker emailSenderSubWorker = new EmailSenderSubWorker(TASK_SEND_EMAIL, javaMailSender, WORKER_NAME);

    //Create WorkflowTaskCoordinator
    logger.info("Creating WorkflowTaskCoordinator " + urlCheckerSubWorker + threadCount + taskClient);
    WorkflowTaskCoordinator.Builder builder = new WorkflowTaskCoordinator.Builder();
    WorkflowTaskCoordinator coordinator = builder.withWorkers(urlCheckerSubWorker,emailSenderSubWorker,controlMWorker).withThreadCount(threadCount).withTaskClient(taskClient).build();

    //Start for polling and execution of the tasks
    logger.info("Initializing Coordincator ");
    coordinator.init();
    logger.info("Completed Coordinator Initialization "+ coordinator.getWorkerNamePrefix());

All 5 comments

Workflow Definition is as below

{
"ownerApp": "Test_5_Control_M_Test_5_Control_M",
"createTime": 1567632362352,
"createdBy": "AutoPoP Workflow Generator",
"name": "Test_5_Control_M",
"description": "Test_5_Control_M",
"version": 1,
"tasks": [
{
"name": "TASK_CHECK_URLS",
"taskReferenceName": "TK-05_09_19_02_55_11_005",
"description": "TK-05_09_19_02_55_11_005"
},
"type": "SIMPLE",
"startDelay": 0,
"optional": true,
"rateLimited": false
}
],
"schemaVersion": 2,
"restartable": false,
"workflowStatusListenerEnabled": false
}

Looks like you should check network issues

Can you change your Worker's log4j settings so that it prints at a DEBUG level? The conductor worker code should print out what it's doing behind the scenes (like each polling call)

you can enabled logger com.netflix.conductor.service.TaskServiceImpl on conductor side to see for sure whether workers reach conductor-server
Screen Shot 2019-09-11 at 8 22 52 pm

Found the issue.
Client Jars were not able to connect to Conductor Server over HTTPS.

Updated code while TaskClient object creation by passing HTTP client configuration that bypasses certificate check, not recommended but in our usecase security is managed at container level and hence we can bypass certificate validation.

I will paste the working code shortly but this issue it's closed

Was this page helpful?
0 / 5 - 0 ratings

Related issues

MaksimRT picture MaksimRT  路  4Comments

HardiChandra picture HardiChandra  路  3Comments

yosiat picture yosiat  路  4Comments

haigopi picture haigopi  路  5Comments

juaby picture juaby  路  4Comments