ΠΡΠΎΠ΅ΠΊΡ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ Π΄Π»Ρ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ΅ΠΊΡΡΠΎΠ² ΠΏΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌ:
- Π‘Π»ΠΎΠΆΠ½ΠΎΡΡΡ ΡΡΠ΅Π½ΠΈΡ
- Π£ΡΠΎΠ²Π΅Π½Ρ Π²ΠΎΠ΄Ρ Π² ΡΠ΅ΠΊΡΡΠ΅
- ΠΠ°ΡΡΡΠΎΠ΅Π½ΠΈΠ΅ ΡΠ΅ΠΊΡΡΠ°
- Π‘ΠΊΠ»ΠΎΠ½ΠΈΡΡΠΉΡΠ΅ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ ΠΏΡΠΎΠ΅ΠΊΡΠ° Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
git clone https://github.com/NeZorinEgor/microservice_1.0
- Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ
go get github.com/go-sql-driver/mysql
go get github.com/gorilla/mux
go get github.com/ledongthuc/pdf
go get google.golang.org/grpc
- Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΡΠ°Π±Π»ΠΈΡΡ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ
CREATE TABLE `states` (
`id` int UNSIGNED NOT NULL,
`title` varchar(50) NOT NULL,
`reading` int UNSIGNED NOT NULL,
`water` int UNSIGNED NOT NULL,
`mood` varchar(20) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
- ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° ΠΏΠΎΠ΄ΠΊΠ»ΡΠ±ΡΠ΅Π½ΠΈΡ ΠΠ
- Π ΡΠ°ΠΉΠ»Π΅
main.go
ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ Π² ΡΡΡΠΎΠΊΠ΅db, err := sql.Open("mysql", "login:password@tcp(127.0.0.1:3305)/db")
Π½Π° Π²Π°ΡΠΈ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π΄Π»Ρ ΡΡΠΏΠ΅ΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ .
- ΠΠ΅ΡΠ΅ΠΉΠ΄ΠΈΡΠ΅ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠ°:
cd go_microservice
- ΠΡΠΎΠΏΠΈΡΠΈΡΠ΅ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Ρ
go run main.go
github.com/go-sql-driver/mysql
ΠΡΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π΄ΡΠ°ΠΉΠ²Π΅Ρ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½ΡΡ MySQL Π² ΡΠ·ΡΠΊΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Go.github.com/gorilla/mux
ΠΡΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΌΠΎΡΠ½ΡΠΉ ΠΈ Π³ΠΈΠ±ΠΊΠΈΠΉ ΠΌΠ°ΡΡΡΡΡΠΈΠ·Π°ΡΠΎΡ (router) Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π²Π΅Π±-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° ΡΠ·ΡΠΊΠ΅ Go.go get github.com/ledongthuc/pdf
ΠΡΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΡΠ½ΠΊΡΠΈΠΈ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠ°ΠΉΠ»Π°ΠΌΠΈ ΡΠΎΡΠΌΠ°ΡΠ° PDF Π² ΡΠ·ΡΠΊΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Go.google.golang.org/grpc
ΠΡΠΎ Π²ΡΡΠΎΠΊΠΎΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊ Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ°Π·ΡΠ°Π±Π°ΡΡΠ²Π°Π»ΡΡ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠ΅ΠΉ Google. ΠΠ½ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΊΠ»ΠΈΠ΅Π½Ρ-ΡΠ΅ΡΠ²Π΅ΡΠ½ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°ΡΡ ΠΌΠ΅ΠΆΠ΄Ρ Π½ΠΈΠΌΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π° gRPC.
Π§ΡΠΎΠ±Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ΅ΡΠ²ΠΈΡ, Π½ΡΠΆΠ½Π½ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡ ΡΠ°ΠΌΡ Π»ΠΎΠ³ΠΈΠΊΡ Π°Π½Π°Π»ΠΈΠ·Π°, Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ Π½ΡΠΆΠ½ΠΎ Π·Π°ΠΏΡΡΡΠΈΡΡ Π΅Π³ΠΎ.
- ΠΡΠ»ΠΈ Π²Ρ Π½Π΅ Ρ ΠΎΡΠΈΡΠ΅ ΡΠΎΠ±ΠΈΡΠ°ΡΡ Π»ΠΎΠ³ΠΈΠΊΡ ΠΏΡΠΎΠ΅ΠΊΡΠ°, ΠΈ Π΅Π΅ ΠΌΠΎΠ΄Π΅ΡΠ½Π΅Π·ΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠ΅ΡΠ΅ΠΉΠ΄ΠΈΡΠ΅ ΠΊ ΠΏΡΠ½ΠΊΡΡ Π·Π°ΠΏΡΡΠΊ
Π‘Π»Π΅Π΄ΡΠΉΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡΠΌ Π² ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ:
git submodule update --init --recursive
mkdir analysis_microservice/build
cd analysis_microservice/build
cmake ..
ΠΠΈΠ±ΠΎ ΠΆΠ΅ ΡΠΎΠ±ΠΈΡΠ°ΠΉΡΠ΅ CMake
Π² Π»ΡΠ±ΠΎΠΉ Π΄ΡΡΠ³ΠΎΠΉ IDE ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΡΠΎ, Π½Π΅ Π·Π°Π±ΡΠ΄ΡΡΠ΅ ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡ ΡΠ°Π±ΠΌΠΎΠ΄ΡΠ»ΠΈ
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π·Π°ΠΏΡΡΡΠΈΡΡ Π²Π°ΡΠ΅ ΡΠΎΠ±ΡΠ°Π½Π½ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π»ΠΈΠ±ΠΎ Π±ΡΠ°ΡΡ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ release
ΠΈΠ· Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ.
Π§ΡΠΎΠ±Ρ ΡΠ°Π·Π²Π΅ΡΠ½ΡΡΡ ΡΠ΅ΡΠ²Π΅Ρ Π²ΡΠ΅ ΡΡΠΎ Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΡΡΠΎ IP ΠΈ ΠΏΠΎΡΡ. ΠΡΠΈΠΌΠ΅Ρ Π΄Π»Ρ localhost
ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ:
./analysis_service 127.0.0.1 1111
Π§ΡΠΎΠ±Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡ ΡΠ΅ΡΠ²ΠΈΠ· Π°Π½Π°Π»ΠΈΠ·Π° ΠΊ ΡΠ²ΠΎΠ΅ΠΌΡ ΠΏΡΠΎΠ΅ΠΊΡΡ Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ Π²ΡΠ·ΡΡ .proto
ΠΈΠ· Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΡ
ΠΏΠ°ΠΏΠΎΠΊ ΠΈ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ
gRPC
ΠΊΠ»ΠΈΠ΅Π½Ρ Π΄Π»Ρ ΡΠ²ΠΎΠ΅Π³ΠΎ ΡΠ·ΡΠΊΠ°, ΠΏΠΎΡΠ»Π΅ ΠΌΠΎΠΆΠ½ΠΎ Ρ Π»Π΅Π³ΠΊΠΎΡΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π·Π°ΠΏΡΠΎΡΡ ΠΈ ΠΎΡΠ²Π΅ΡΡ ΡΠ΅ΡΠ²ΠΈΡΠ°. ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π° ΠΎΠ±ΡΠ΅Π½ΠΈΡ
service TextAnalysService {
rpc getResult (SettingsTextPB) returns (ResultParsingPB) {} // ΠΡΠ½ΠΎΠ²Π°Π½ΠΎΠ΅ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Ρ ΡΠ΅ΡΠ²ΠΈΡΠΎΠΌ
}
message SettingsTextPB {
string text = 1; // ΠΡΡ
ΠΎΠ΄Π½ΡΠΉ ΡΠ΅ΠΊΡΡ Π½Π° Π²Ρ
ΠΎΠ΄
}
message ResultParsingPB {
enum Mood { //ΠΠ°ΡΡΡΠΎΠ΅Π½ΠΈΠ΅ ΡΠ΅ΠΊΡΡΠ°
sad = 0;
happy = 1;
lovely = 2;
terrible = 3;
boring = 4;
}
int32 water_value = 1; // Π£ΡΠΎΠ²Π΅Π½Ρ Π²ΠΎΠ΄Ρ Π² ΡΠ΅ΠΊΡΡΠΊ
Mood mood = 2;
int32 hard_reading = 3; // Π‘Π»ΠΎΠΆΠ½ΠΎΡΡΡ ΡΡΠ΅Π½ΠΈΡ ΡΠ΅ΠΊΡΡΠ°
}
gRPC
ΠΈgProtobuf
ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΠΊΠ°ΠΊ ΡΠ°Π±ΠΌΠΎΠ΄ΡΠ»ΠΈ, ΡΠ°ΠΊΠΆΠ΅protoc
Π½ΡΠΆΠ½ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ Π»Π΅ΠΆΠΈΡ Π² ΡΡΠΈΠ»ΠΈΡΠ°Ρsqlite
ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π±ΠΎΠ»Π΅Π΅ ΡΠ°Π·Π²Π΅ΡΠ½ΡΡΠ°Ρ Π±ΠΈΠ±Π»Π΅ΠΎΡΠ΅ΠΊΠ° Π΄Π»Ρ Ρ++, ΡΠ°ΠΊΠΆΠ΅ ΡΠ°Π±ΠΌΠΎΠ΄ΡΠ»Π΅ΠΌ, Π΄Π»Ρ Ρ ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΡΠΈΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ².