Action / Reaction Consumers

Consumers are programs designed to execute actions and reactions of a workflow.

        graph TD
    Front(Front)
    Main(Main program)

    ActionQueue(Action queue)
    ReactionQueue(Reaction queue)

    ActionConsumer1(Action consumer)
    ActionConsumer2(Action consumer)

    ReactionConsumer1(Reaction consumer)
    ReactionConsumer2(Reaction consumer)
    ReactionConsumer3(Reaction consumer)

    Front -- Create workflow --> Main

    Main -- Workflows --> ActionQueue

    ActionQueue -- Workflow --> ActionConsumer1
    ActionQueue -- Workflow --> ActionConsumer2

    ActionConsumer1 -- Workflow --> ReactionQueue
    ActionConsumer2 -- Workflow --> ReactionQueue

    ReactionQueue -- Workflow --> ReactionConsumer1
    ReactionQueue -- Workflow --> ReactionConsumer2
    ReactionQueue -- Workflow --> ReactionConsumer3
    

How To Launch Consumers?

The action / reaction consumers are both implemented in server/cmd/action_consumer and server/cmd/reaction_consumer.

go build -o action_consumer cmd/action_consumer/main.go      # For action consumer
go build -o reaction_consumer cmd/reaction_consumer/main.go  # For reaction consumer
./action_consumer                                            # Launch action consumer
./reaction_consumer                                          # Launch reaction consumer

Action consumer

Action consumer is a consumer used to detect actions on the service. It is triggered by the main program (trigger queue). It receives workflow directly from the main program. A route has been defined to manually launch triggers. It is available at /trigger. When an action is detected, the consumer will send a message to the reaction queue which will dispatch the workflow to a reaction consumer.

Reaction consumer

Reaction consumer is a consumer used to process the action. It is triggered by the action consumer. It receives the workflow and process all associated events on it.

Callbacks

Both action and reaction consumers use callbacks to process fetch. Callbacks are defined in a map. Callbacks’ id MUST correlate to the one defined in the database.