daggerok / node-cqrs

This repository contains CQRS application using node/express, servicebus-* + rabbitmq mongo and docker (e2e tests with swarm cluster included)
1 stars 1 forks source link
cqrs docker docker-cluster docker-compose docker-stack docker-stack-deploy docker-swarm docker-swarm-cluster mongodb mongoose nodejs rabbitmq servicebus

= 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