Command Dispatcher, Processor, and Distributed Task Queue
Clone or download
iancooper Merge pull request #313 from tapmantwo/remove_new_constraint
Remove new() constraint from commandstore GetAsync and GetAsync method
Latest commit 4ee9819 Oct 16, 2018
Permalink
Failed to load latest commit information.
.vscode Basic tasks for vscode Sep 2, 2017
docs Altered the project structure to conform to: https://gist.github.com/… Mar 16, 2017
help force folder rename Mar 16, 2017
lib clean up references and imports; upgrade selected packages Mar 29, 2017
samples Updates netcoreapp2.0 to netcoreapp2.1 as it is end of life Oct 10, 2018
src Merge pull request #313 from tapmantwo/remove_new_constraint Oct 16, 2018
tests/Paramore.Brighter.Tests Merge pull request #313 from tapmantwo/remove_new_constraint Oct 16, 2018
tools Adds cake build script Jun 6, 2018
.editorconfig Adds .editorconfig for coding styles Apr 12, 2018
.gitattributes Update .gitattributes Mar 17, 2017
.gitignore Updates gitignore Jun 6, 2018
Brighter.sln Replace common.props with Directory.Build.Props Oct 10, 2018
CODE_OF_CONDUCT.md Update and rename code_of_conduct.md to CODE_OF_CONDUCT.md Mar 6, 2018
CONTRIBUTORS.md Update CONTRIBUTORS.md Oct 10, 2018
Contributing.md Update Contributing.md May 11, 2018
Directory.Build.props Replace common.props with Directory.Build.Props Oct 10, 2018
LICENCE.txt split python projects from paramore.brighter Dec 30, 2016
NuGet.config Updates fakeiteasy to official dotnetcore version Mar 3, 2017
README.md Updates README to fix docker-compose up command for testing May 22, 2018
appveyor.yml Appveyor switch to linux containers Oct 11, 2018
build.cake cake to do light tests by default Oct 10, 2018
build.ps1 Adds cake build script Jun 6, 2018
build.sh Adds cake build script Jun 6, 2018
docker-compose.appveyor.yaml Add default network Oct 11, 2018
docker-compose.yaml More docker-compose Oct 10, 2018
docker_toolbox_ports.ps1 Note some additional exceptions to handle Jan 31, 2018
release_notes.md Update release_notes.md Oct 10, 2018

README.md

canon Brighter
Brighter is a command dispatcher, processor, and task queue. It can be used to implement the Command Invoker pattern. It can be used for interoperability in a microservices architecture as well.
Version NuGet Version
Download NuGet Downloads
Web http://brightercommand.github.io/Brighter/
Source https://github.com/BrighterCommand/Brighter
Chat Join the chat at https://gitter.im/iancooper/Paramore
Keywords task queue, job queue, asynchronous, async, rabbitmq, amqp, c#, command, command dispatcher, command processor, queue, distributed

Why a Command Dispatcher, Command Processor, and Task Queue?

  • When implementing a hexagonal architecture, one question is how to implement a port.
    • Brighter shows how to implement ports using a Command approach (with a Command Dispatcher)
    • This is the strategy described for services in Service Design Patterns as Command Invoker
  • A command processor lets you add orthogonal concerns seperately to the processing of commands such as logging, undo, validation, retry, and circuit breaker
    • Brighter provides a Command Processor, using a 'Russian Doll' model to allow a pipeline of handlers to operate on a command.
  • A task queue allows a one process to send work to be handled asynchronously to another process, using a message queue as the channel, for processing. A common use case is to help a web server scale by handing off a request to another process for back-end processing. This allows both a faster ack and throttling of the request arrival rate to that which can be handled by a back end processing component. For another project with this goal, see Celery
    • Brighter provides a Task Queue implementation for handling commands asynchronously via a work queue.

Documentation

  • More detailed documentation on the project can be found on the GitHub pages for the project here: Paramore

What are the different branches?

Branch Description
Master The tip of active development. Anything in master should ship at the next release. Code here should conform to CI basics: compile, pass tests etc.
gh-pages Documentation for the library
[Other] A branch for any work that is not ready to go into master (for example would break CI) or is experimental i.e. we don't know if we intend to ever ship, we are just trying out ideas.

Using Docker Compose to test

We provide a Docker Compose file to allow you to run the test suite, without having to install the pre-requisites, such as brokers or databases locally.

To run it, you will need to scale the redis sentinel to at least 3 nodes, and use at least two redis slaves. For example:

docker-compose up -d --build --scale redis-slave=2 --scale redis-sentinel=3

The goal is to allow you to begin working with Brighter as easily as possible for development.

Note that if you have locally installed versions of these services you will either need to stop them, or edit a local version of the docker compose file.

How do I get the NuGet packages for the latest build?

We release the build artefacts (NuGet packages) to NuGet on a regular basis and we update the release notes on those drops. We also tag the master code line. If you want to take the packages that represent master at any point you can download the packages for the latest good build from AppVeyor. The easiest approach to using those is to download them into a folder that you add to your NuGet sources.

Coverity Scan Build Status

Build status