[Chanaka Fernando] Designing Microservices Platforms with NATS [ENG, 2021]
English | 2021 | ISBN: 978-1801072212 | 356 Pages | PDF, EPUB | 20 MB |
GitHub:
https://github.com/PacktPublishing/Designing-Microservices-Platforms-with-NATS
A Practical Example of Microservices with NATS
Сразу пробуем практику
$ apt install -y jq
$ docker run -p 4222:4222 -ti nats:latest
$ cd ~/tmp/
$ git clone [email protected]:PacktPublishing/Designing-Microservices-Platforms-with-NATS.git
$ cd Designing-Microservices-Platforms-with-NATS/chapter6/
$ vi docker-compose.yml
version: '3'
services:
mysql-dev:
restart: always
image: mysql
ports:
- '3306:3306'
volumes:
- ./mysql:/etc/mysql/conf.d
environment:
MYSQL_DATABASE: opd_data
MYSQL_ROOT_PASSWORD: pA55w0rd1
$ docker-compose up
$ telnet localhost 3306
$ sudo apt update -y
$ sudo apt install -y mysql-client
$ mysql --user=root --password=pA55w0rd1 -h 127.0.0.1 opd_data
mysql> SELECT DATABASE();
$ cd ~/tmp/Designing-Microservices-Platforms-with-NATS/chapter6/resources/
// Добавляем данные в базу
$ mysql --user=root --password=pA55w0rd1 -h 127.0.0.1 opd_data < ./mysql.sql
$ mysql --user=root --password=pA55w0rd1 -h 127.0.0.1 opd_data
mysql> show tables;
+-----------------------+
| Tables_in_opd_data |
+-----------------------+
| discharge_details |
| inspection_details |
| inspection_reports |
| medication_reports |
| patient_details |
| patient_registrations |
| release_reports |
| test_reports |
+-----------------------+
Registration service
$ cd ~/tmp/Designing-Microservices-Platforms-with-NATS/chapter6/registration-service/
$ go run cmd/main.go -dbName opd_data -dbUser root -dbPassword pA55w0rd1
output:
***
2021/12/25 19:37:34 Listening for HTTP requests on 0.0.0.0:9090
$ curl \
--data '{"full_name":"chanaka fernando","address":"44, sw19, london","id":200, "sex":"male", "phone":222222222}' \
--header "Content-Type: application/json" \
--request POST \
--url "http://localhost:9090/opd/patient/register" \
| jq
output:
{
"id": 200,
"token": 1
}
Inspection service
$ cd ~/tmp/Designing-Microservices-Platforms-with-NATS/chapter6/inspection-service/
$ go run cmd/main.go -dbName opd_data -dbUser root -dbPassword pA55w0rd1
output:
***
2021/12/25 19:44:20 Listening for HTTP requests on 0.0.0.0:9091
$ curl \
--data '{"id":200, "time":"2021/07/12 10:21 AM", "observations":"ABC Syncrome", "medication":"XYZ x 3", "tests":"FBT, UC", "notes":"possible Covid-19"}' \
--header "Content-Type: application/json" \
--request POST \
--url "http://localhost:9091/opd/inspection/record" \
| jq
output:
{
"id": 200,
"medication": "XYZ x 3",
"tests": "FBT, UC",
"notes": "possible Covid-19"
}
Treatment service
$ cd ~/tmp/Designing-Microservices-Platforms-with-NATS/chapter6/treatment-service
$ go run cmd/main.go -dbName opd_data -dbUser root -dbPassword pA55w0rd1
output:
***
2021/12/25 19:48:09 Listening for HTTP requests on 0.0.0.0:9092
$ curl \
--data '{"id":200,"time":"2021 07 12 4:35PM","dose":"xyz x 1, abc x 2","notes":"low fever"}' \
--header "Content-Type: application/json" \
--request POST \
--url "http://localhost:9092/opd/treatment/medication" \
| jq
output:
"Record updated successfully"
Release service
$ cd ~/tmp/Designing-Microservices-Platforms-with-NATS/chapter6/release-service
$ go run cmd/main.go -dbName opd_data -dbUser root -dbPassword pA55w0rd1
output:
***
2021/12/25 19:49:49 Listening for HTTP requests on 0.0.0.0:9093
$ curl \
--data '{"id":200,"time":"2021 07 12 9:35 PM","state":"discharge","post_medication":"NM x 10 days","next_visit":"2021 08 12 09:00AM"}' \
--header "Content-Type: application/json" \
--request POST \
--url "http://localhost:9093/opd/release/discharge" \
| jq
output:
"Patient discharge recorded successfully"
Testing the OPD application
$ curl \
--data '{"full_name":"John Doe","address":"44, sw19, london","id":200, "sex":"male", "phone":222222222}' \
--header "Content-Type: application/json" \
--request POST \
--url "http://localhost:9090/opd/patient/register" \
| jq
$ curl "http://localhost:9091/opd/inspection/pending" \
| jq
[
{
"id": 200,
"token": 2
}
]
$ curl \
--data '{"id":200, "time":"2021/07/12 10:21 AM", "observations":"ABC Syncrome", "medication":"XYZ x 3", "tests":"FBT, UC", "notes":"possible Covid-19"}' \
--header "Content-Type: application/json" \
--request POST \
--url "http://localhost:9091/opd/inspection/record" \
| jq
{
"id": 200,
"medication": "XYZ x 3",
"tests": "FBT, UC",
"notes": "possible Covid-19"
}
$ curl "http://localhost:9092/opd/treatment/pending" \
| jq
[
{
"id": 200,
"medication": "XYZ x 3",
"tests": "FBT, UC",
"notes": "possible Covid-19"
}
]
$ curl \
--data '{"id":200,"time":"2021 07 12 4:35 PM","dose":"xyz x 1, abcx 2","notes":"low fever"}' \
--header "Content-Type: application/json" \
--request POST \
--url "http://localhost:9092/opd/treatment/medication" \
| jq
"Record updated successfully"
$ curl \
--data '{"id":200,"time":"2021 07 12 4:35 PM","test_name":"FBC","status":"sample collected", "notes":"possible covid-19"}' \
--header "Content-Type: application/json" \
--request POST \
--url "http://localhost:9092/opd/treatment/tests" \
| jq
"Test recorded successfully"
"Record updated successfully"
$ curl \
--data '{"id":200,"time":"2021 07 12 8:35 PM","next_state":"discharge","post_medication":"NM x 10 days"}' \
--header "Content-Type: application/json" \
--request POST \
--url "http://localhost:9092/opd/treatment/release" \
| jq
"Release event published"
$ curl "http://localhost:9093/opd/release/pending" \
| jq
[
{
"id": 200,
"time": "2021 07 12 8:35 PM",
"next_state": "discharge",
"post_medication": "NM x 10 days"
}
]
$ curl \
--data '{"id":200,"time":"2021 07 12 9:35 PM","state":"discharge","post_medication":"NM x 10 days","next_visit":"2021 08 12 09:00AM"}' \
--header "Content-Type: application/json" \
--request POST \
--url "http://localhost:9093/opd/release/discharge" \
| jq
"Patient discharge recorded successfully"