У меня куча сервисов. Все функции которые у них повторяются я вынес в отдельный пакет lib.
К примеру вызов методов других сервисов и т.д. Но это уже противоречит идее микросервисной архитектуры (сломать можно всё и сразу). А копипастить код во все сервисы я не хочу по понятным причинам. Так как же мне быть?
А вот как я связываюсь с сервисами
config.json
{
"Auth":{
"Conn":["127.0.0.1","5000","password"],
"Method":{
"Save":true
}
},
"Game":{
"Conn":["127.0.0.1","5001","password"],
"Method":{
"Reg":true
}
}
}
main.go
lib.ServiceConfigLoad("config.json")
err := lib.ServiceGet(ps.ByName("service"), ps.ByName("method"), func(c Client.RpcConnect) {
//отправляем запрос
var dd map[string]string
json.Unmarshal([]byte(ps.ByName("data")), &dd)
r, err := c.Send(ps.ByName("method"), dd)
if err != nil {
log.Println(err)
}
//декодируем ответ и отдаём юзеру
jsonString, err := json.Marshal(r)
if err != nil {
log.Println(err)
}
w.Write(jsonString)
})
if err != nil {
w.Write([]byte(`{"code":"501","err":"` + err.Error() + `"}`))
}
Меня бесит что я должен руками вбить все доступные методы для каждого сервиса. Но и идея с опросом сервисов о их API тоже не сильно нравится. Так как быть мне?