Code Monkey home page Code Monkey logo

reactive-example's Introduction

JobDefinition
    :jobDefinitionId
    :jobName
    :IdKey
    :itemObservable [Observable of items to be processed]
    :itemReader     [create message for each record]
    :itemProcessor  [generate checksum | compare checksum | change event ]
    :itemWriter     [change event -> source]
    :jobExecutionParameters<JEParam>

JobCache
    :key    <jobDefinitionId>
    :value  <jobExecutionId>
    :distributed Lock (local and database backed implementations)

JobManager
    :StartJob
        [fileName]
        ->JobCache:AddJob[fileName]
            ->If Already Exists Error
            or
            ->publish [JobReaderProcessor]start_job[jobInstanceId]
    :StopJob
        ->jobExecution::stopJob = 1

JobNotifier
    :interval reactive Observable [ emits JobExecution to subscribers ]

JobExecution<JEParam,Integer><P,A>[completion_status | stats ]
    :jobDefinitionId
    :jobExecutionId
    :startTime
    :stopTime
    :status
    :error
    :stopJob (AtomicInteger)
    :Map<Enum,A>
        itemReader          count
        itemProcessor       count
        itemWrite           count
        deltaNoChange       count
        deltaCreatePending  count
        deltaUpdatePending  count
        deltaDeletePending  count
        deltaCreate         count
        deltaUpdate         count
        deltaDelete         count
    ->checkCompletion
        ->skip termination logic
        ->all completion messages received

JobJournalist
    ->journal to file
    ->update to db (batch update every n seconds)
    ->logErrors for sentinel

[JobReadProcess]Message:start_job[jobInstanceId]
    ->JobCache::GetJob[jobInstanceId]
    ->itemReader[fileName] (stream, reactiveObservable)
        ->[publish [JobJournal completion (itemReader,recordCount)]]
    ->itemProcessor[publish [JobJournal no_change | pending_change | error] &&  [JobWriter pending_change [CUD] ]
        ->[publish [JobJournal completion (itemProcessor,recordCount) ]]
        ->[publish [JobJournal expected (itemWriter,recordCount) ]]

[JobWrite]Message:change[CUD] [jobInstanceId | recordId]
    ->JobCache::GetJob[jobInstanceId]
    ->itemWriter[publish [JobJournal change[CUD] | error]]

[JobJournal]Message:no_change [jobInstanceId | recordId]
[JobJournal]Message:pending_change[CUD] [jobInstanceId | recordId]
[JobJournal]Message:change[CUD] [jobInstanceId | recordId]
[JobJournal]Message:error       [jobInstanceId | recordId]
[JobJournal]Message:completion  [workerName(reader|processor|writer) | recordCount]
[JobJournal]Message:expected    [workerName(writer) | recordCount]
    ->jobJournalist[ write to file | logErrors ] (multiple threaded io subscriber)
    ->jobManager [ update execution state ] (single threaded subscriber)
    ->jobNotifier [publish jobExecution periodically]

Flow:
    JobManager:startJob
        JobCache:AddJob
    JobRunner:
        ItemReaderFactory
            DeltaJob
                createDeltaJob
            OpenFile
                ItemReader(readLine)->JsonRecord
        ItemProcessor(JsonRecord)->DeltaRecord
            Extract Id
            GenerateHashCode
            DeltaCache:Query if DeltaRecord exists
        ItemWriter(DeltaRecord)
            WriteJsonPayLoad to Kafka

reactive-example's People

Contributors

7khedge avatar adityasofat avatar

Watchers

 avatar

Forkers

zjpjohn

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.