The evolution of a component-based architecture
See Git tags for step-by-step notes.
git tag -ln
v1 First commit
v2 Functional groups
v3 Feature groups (Bounded Context)
v4 Components
v5 Applications
v6 Services
v7 Databases
v8 Versioning
v9 Service Discovery
v10 Circuit Breaker-
Install redis
brew install redis
-
Modify
/opt/homebrew/etc/redis.conf(/usr/local/etc/redis.confon Intel Macs)requirepass foobared
-
Install mysql
brew install mysql
-
Modify
/opt/homebrew/etc/my.cnf(/usr/local/etc/my.cnfon Intel Macs)default-time-zone='+00:00' -
Database setup
mysql -v -uroot --execute="drop user 'uservices'@'localhost'" mysql -v -uroot --execute="create user 'uservices'@'localhost' identified by 'uservices';" for database_name in 'allocations' 'backlog' 'registration' 'timesheets'; do mysql -v -uroot --execute="drop database if exists ${database_name}_test" mysql -v -uroot --execute="create database ${database_name}_test" mysql -v -uroot --execute="grant all on ${database_name}_test.* to 'uservices'@'localhost';" mysql -v -uroot --execute="grant select on performance_schema.* to 'uservices'@'localhost';" done mysql -v -uuservices -puservices registration_test --execute="select now();"
-
Schema Migrations
flyway -reportEnabled=false -cleanDisabled=false -user=uservices -password=uservices -url="jdbc:mysql://localhost:3306/allocations_test" -locations=filesystem:databases/allocations-database clean migrate flyway -reportEnabled=false -cleanDisabled=false -user=uservices -password=uservices -url="jdbc:mysql://localhost:3306/backlog_test" -locations=filesystem:databases/backlog-database clean migrate flyway -reportEnabled=false -cleanDisabled=false -user=uservices -password=uservices -url="jdbc:mysql://localhost:3306/registration_test" -locations=filesystem:databases/registration-database clean migrate flyway -reportEnabled=false -cleanDisabled=false -user=uservices -password=uservices -url="jdbc:mysql://localhost:3306/timesheets_test" -locations=filesystem:databases/timesheets-database clean migrate
-
Run tests
./gradlew build
Each server is configured through environment variables. Build the runnable jars first:
./gradlew buildStart the discovery server (backed by redis):
PORT=8888 \
REDIS_HOST=localhost \
REDIS_PASSWORD=foobared \
java -jar applications/discovery-server/build/libs/discovery-server.jarThen start each application server (backed by mysql), pointing it at the discovery server:
PORT=8881 \
DATABASE_URL="jdbc:mysql://localhost:3306/allocations_test?user=uservices&password=uservices" \
DISCOVERY_SERVER_ENDPOINT=http://localhost:8888 \
java -jar applications/allocations-server/build/libs/allocations-server.jar
PORT=8882 \
DATABASE_URL="jdbc:mysql://localhost:3306/backlog_test?user=uservices&password=uservices" \
DISCOVERY_SERVER_ENDPOINT=http://localhost:8888 \
java -jar applications/backlog-server/build/libs/backlog-server.jar
PORT=8883 \
DATABASE_URL="jdbc:mysql://localhost:3306/registration_test?user=uservices&password=uservices" \
DISCOVERY_SERVER_ENDPOINT=http://localhost:8888 \
java -jar applications/registration-server/build/libs/registration-server.jar
PORT=8884 \
DATABASE_URL="jdbc:mysql://localhost:3306/timesheets_test?user=uservices&password=uservices" \
DISCOVERY_SERVER_ENDPOINT=http://localhost:8888 \
java -jar applications/timesheets-server/build/libs/timesheets-server.jar| Variable | Used by | Description |
|---|---|---|
PORT |
all servers | Port the server listens on |
DATABASE_URL |
application servers | JDBC URL for the server's mysql database |
REDIS_HOST / REDIS_PASSWORD |
discovery server | Redis connection used for the service registry |
DISCOVERY_SERVER_ENDPOINT |
application servers | Base URL of the discovery server for heartbeats and lookups |