In this workshop, you are going to develop a micro-service application called vert2go. This workshop covers:
- how to build micro-services with vert.x
- how you can use the event bus to bind your micro-services
- how to consume a REST API
- how to build an application using several persistence technologies
- how to provide a REST API, and build proxies
- how to deploy some micro-service to Openshift
- how to centralize your logs
- how to deploy a vert.x micro-service in a docker container
- how to monitor your application
The vert2go application is a recommendation application where users can rates the place they like.
The slides for the talk are online.
Prerequisites:
- Java 8 (JDK)
- Git
- Apache Maven
- Docker (or docker-machine)
- An IDE
- RoboMongo (optional)
Docker runs natively on Linux. Because the Docker daemon uses Linux-specific kernel features, you can’t run Docker natively in OS X or Windows. Instead, you must use docker-machine to create and attach to a virtual machine (VM). This machine is a Linux VM that hosts Docker for you on your Mac or Windows. If you are on Mac OS X or Windows, you can use docker via docker machine (https://docs.docker.com/machine/).
- Install docker and docker-machine from https://www.docker.com/docker-toolbox. Installation instructions are there: http://docs.docker.com/mac/step_one/
- Once done run
docker run hello-world
to verify your installation
The installation process will create a VM that has a minimal linux to run docker.
This service shows how to connect to a mongodb database and genereate a API interface that will generate bindings for the 2 languages used across the demo, groovy and javascript.
cd data-storage-service
mvn clean package
java -jar target/data-storage-service-1.0-SNAPSHOT-fat.jar --cluster --conf=src/conf/config.json
This REST consumer will consume a REST service and populate the mongo collection directly it does not need to be part of a cluster
cd data-provisioning
mvn clean package
java -jar target/data-provisioning-1.0-SNAPSHOT-fat.jar --conf=src/conf/config.json
This is a simple client written in Groovy
that show the usage of service proxies generated from the data storage service
. Since this client has no knowledge on mongo and uses a proxy it needs to be part of the cluster to find where
to delegate the the action from the proxy.
cd data-storage-client
mvn clean package
java -jar target/data-provisioning-1.0-SNAPSHOT-fat.jar --cluster
This is the web part of the application it will show the usage of the sockjs
bridge and that generated proxies can be
consumed also from the browser. This part of the code show that a Verticle
can be written in javascript
.
cd frontend
mvn clean package
java -jar target/frontend-1.0-SNAPSHOT-fat.jar --cluster
This component show a part of the application that can be deployed on the cloud and we will consume its service using REST. It works as the other components but since we are deploying it on OpenShift there are a few extra steps.
For the first time we need to create an app:
rhc create-app map0render0service https://raw.githubusercontent.com/vert-x3/vertx-openshift-cartridge/master/metadata/manifest.yml
And then
cd frontend
mvn clean package
cd openshift
git add -A
git commit -m "deploy my application"
git push
We will consume the map service as a local proxy and add caching headers this we will deploy on Docker
.
cd map-server-proxy
mvn clean install
mvn docker:build
mvn docker:start
If one refreshes the frontend javascript application the map should start showing on the right side of the screen.
This shows again how to connect to redis
and use pub/sub
mode to pubish votes if one opens 2 browsers and clicks on
one restaurant and votes the counters should update in realtime on both web clients.
cd recommendation-service
mvn clean package
java -jar target/recommendation-service-1.0-SNAPSHOT-fat.jar --cluster --conf=src/conf/config.json
replace the jul configuration content on data-storage-service
with the example on etc
and add the GELF
dependency
to the pom.xml
.
Start graylog2
and enable the UDP transport.
Rebuild and restart the service
cd data-storage-service
mvn clean package
java -jar target/data-storage-service-1.0-SNAPSHOT-fat.jar --cluster --conf=src/conf/config.json
Using the client or the web browser load some data, the logs should now be collected in a graylog
server.
Start the server see the scripts folder. Add a bridge to hawkular to the deployment
cd eventbus-to-hawkular-bridge
mvn clean package
java -jar target/eventbus-to-hawkular-bridge-1.0-SNAPSHOT-fat.jar --cluster --conf=src/conf/config.json
Running some queries to the data storage service should generate some metrics to be called.
Start grafana (see scripts) Add a connection use Influx 0.8
and connect to the hawkular server, then add a graph to
the dashboard using the name vertx2go.metrics
and you should start seeing the average requests metrics in a visual
form.