An implementation of the Acme Air sample application for NodeJS. This implementation can support multiple datastores, can run in several application modes, and can support running on a variety of runtime platforms including standalone bare metal system, Virtual Machines, docker containers, IBM Bluemix, IBM Bluemix Container Service.
Environment variable dbtype is used to determine the datastore choice. MongoDB is default. See under "More on configurations".
Environment variable AUTH_SERVICE is use to determine when Micro-Service is used. Default is Monolitic. See under "More on configurations".
One NodeJS application. The default mode.
Main NodeJS application delegates to authorization service NodeJS application hosted on host:port, defined in AUTH_SERVICE
- [Bluemix Instructions] (README_Bluemix.md)
- [Docker Instructions] (README_Docker.md)
- [Bluemix Container Service Instructions] (README_Bluemix_Container.md)
Assume MongoDB started on 127.0.0.1:27017
npm install
node_modules/.bin/npm install
node monolithic_app.js
http://localhost:9085/acmeair-monolithic
install nginx and startup using the nginx.conf file
node authservice_app.js
node customerservice_app.js
node flightservice_app.js
node bookingservice_app.js
node main_app.js
*ports are hardcoded in nginx.conf and settings.json
http://localhost/acmeair
Load Database
preload 10k customers uid[0..9999]@email.com:password, 5 days' flights. Defined in loader/loader-settings.json
Login
Flights
such as Singapore to HongKong or Paris to Moscow
Checkin
cancel some booked flights
Account
update account info
Logout
Name | Default | Meaning |
---|---|---|
dbtype | mongo | You can switch between mongo,cloudant,cassandra for datastore choices. When running on Bluemix, dbtype is automactially discovered from the service the application is bound to. |
AUTH_SERVICE | By default, there is only one main NodeJS application for all logics. When defined, in the format of host:port, it enables Micro-Service mode, main NodeJS application delegates to authorization service NodeJS application hosted on host:port. | |
enableHystrix | false | setting it to true will enable hystrix stream available at /rest/api/hystrix.stream |
MONGO_URL | Mongo database URL. Take precedence over other settings | |
CLOUDANT_URL | Cloudant database URL. Take precedence over other settings | |
CASSANDRA_CP | Cassandra Contact Points. Take precedence over other settings | |
CASSANDRA_KS | Cassandra keyspace. Take precedence over other settings |
Default values are defined here
Name | Default | Meaning |
---|---|---|
mongoHost | 127.0.0.1 | MongoDB host ip |
mongoPort | 27017 | MongoDB port |
mongoConnectionPoolSize | 10 | MongoDB connection pool size |
cloudant_host | Cloudant database host name | |
cloudant_port | 443 | Cloudant database port |
cloudant_username | Cloudant database username/API key | |
cloudant_password | Cloudant database password | |
cloudant_httpclient.maxTotal | 200 | Cloudant http client max connections |
cloudant_httpclient.maxPerRoute | 100 | Cloudant http client connections per route |
cloudant_httpclient.soTimeout | 5000 | Cloudant http client socket timeout |
cloudant_httpclient.connectionTimeout | 5000 | Cloudant http client connection timeout |
cassandra_contactPoints | Cassandra contact points | |
cassandra_keyspace | acmeair_keyspace | Cassandra keyspace |
- When running on Bluemix, datasource url will be read from bound service information.
- For Cloudant, you need to follow instruction to create database and define search index.
- For Cassandra, you need to follow instruction to create keyspace and tables.
Default values are defined here
Name | Default | Meaning |
---|---|---|
MAX_CUSTOMERS | 10000 | number of customers |
MAX_DAYS_TO_SCHEDULE_FLIGHTS | 5 | max number of days to schedule flights |
MAX_FLIGHTS_PER_DAY | 1 | max flights per day |
-
Create a folder under dataaccess with the new dbtype name. Look at current implementation for reference.
-
When drive acmeair workload, you need follow the instruction to use -DusePureIDs=true when starting jmeter.