= node-cqrs image:https://travis-ci.org/daggerok/node-cqrs.svg?branch=master["Build Status", link="https://travis-ci.org/daggerok/node-cqrs"]
This repository contains CQRS application using node/express, servicebus-* + rabbitmq mongo and docker (swarm cluster included)
TODO: not yet finished...
(ui update data) >>
[produce command] >>
[handle rabbit event] >>
[save data into eventstore mongodb (master node)]
...
eventual consistency
...
(ui fetch data) >> | pooling | websockets | backpreassure
[query view / projection] >>
[get data from mongodb (replica node)]
done:
. implemented docker infrastructure: rabbitmq, mongo
. message-frontend app
. message-command app
. message-store app
.send message via REST API to RabbitMQ message broker
[sources,bash]
http post :3001/api/v1/messages content='some data as messages.create type event'
.automation e2e tests using docker swarm / docker stack deploy (required docker / swarm / compose and httpie installed)
[sources,bash]
yarn -i
bash e2e-tests/docker-swarm.bash
.automation e2e tests using docker-compose (required docker compose and httpie installed)
[sources,bash]
yarn -i
bash e2e-tests/docker-compose.bash
.manual e2e testing using docker-compose (required docker compose and httpie installed)
[sources,bash]
yarn -i
docker-compose -f docker/docker-compose-application-services.yml up -d --build
http :3001
docker-compose -f docker/docker-compose-application-services.yml down -v
.development
[sources,bash]
yarn -i
yarn start
yarn stop
yarn global add npm-check-updates
ncu -u
links:
. link:http://expressjs.com/en/4x/api.html[express]
. link:https://www.terlici.com/2015/04/03/mongodb-node-express.html[mongodb-express]
. link:https://www.rabbitmq.com/[rabbitmq]
. link:https://www.npmjs.com/package/servicebus[servicebus]
. link:https://github.com/mateodelnorte/servicebus-retry[servicebus-retry]
. link:https://github.com/mateodelnorte/servicebus-register-handlers[servicebus-register-handlers]
. link:https://github.com/mateodelnorte/servicebus-trace[servicebus-trace]
. link:http://nycnode.com/videos/matt-walters-how-to-cqrs-in-node-eventually-consistent-unidirectional-systems-with-microservices[how to cqrs in node talk]
. link:https://www.youtube.com/watch?v=X_VHWQa1k0k[Eventually Consistent Distributed Systems with Node.js for Finance]
docker links:
. https://docs.docker.com/get-started
. https://docs.docker.com/compose/compose-file/
ocker build -t friendlyname . # Create image using this directory's Dockerfile
docker run -p 4000:80 friendlyname # Run "friendlyname" mapping port 4000 to 80
docker run -d -p 4000:80 friendlyname # Same thing, but in detached mode
docker container ls # List all running containers
docker container ls -a # List all containers, even those not running
docker container stop # Gracefully stop the specified container
docker container kill # Force shutdown of the specified container
docker container rm # Remove specified container from this machine
docker container rm $(docker container ls -a -q) # Remove all containers
docker image ls -a # List all images on this machine
docker image rm # Remove specified image from this machine
docker image rm $(docker image ls -a -q) # Remove all images from this machine
docker login # Log in this CLI session using your Docker credentials
docker tag username/repository:tag # Tag for upload to registry
docker push username/repository:tag # Upload tagged image to registry
docker run username/repository:tag # Run image from a registry
docker stack ls # List stacks or apps
docker stack deploy -c # Run the specified Compose file
docker service ls # List running services associated with an app
docker service ps # List tasks associated with an app
docker inspect # Inspect task or container
docker container ls -q # List container IDs
docker stack rm # Tear down an application
docker-machine create --driver virtualbox myvm1 # Create a VM (Mac, Win7, Linux)
docker-machine create -d hyperv --hyperv-virtual-switch "myswitch" myvm1 # Win10
docker-machine env myvm1 # View basic information about your node
docker-machine ssh myvm1 "docker node ls" # List the nodes in your swarm
docker-machine ssh myvm1 "docker node inspect " # Inspect a node
docker-machine ssh myvm1 "docker swarm join-token -q worker" # View join token
docker-machine ssh myvm1 # Open an SSH session with the VM; type "exit" to end
docker-machine ssh myvm2 "docker swarm leave" # Make the worker leave the swarm
docker-machine ssh myvm1 "docker swarm leave -f" # Make master leave, kill swarm
docker-machine start myvm1 # Start a VM that is currently not running
docker-machine stop $(docker-machine ls -q) # Stop all running VMs
docker-machine rm $(docker-machine ls -q) # Delete all VMs and their disk images
docker-machine scp docker-compose.yml myvm1:~ # Copy file to node's home dir
docker-machine ssh myvm1 "docker stack deploy -c " # Deploy an app