Arquivo service.toml
Um arquivo de configuração de um serviço é um arquivo texto utilizando a sintaxe TOML para ajustar diversas informações relacionadas a ele.
Atualmente ele deve conter, pelo menos, as seguintes informações:
- nome do serviço
- categoria do serviço
- versão (no formato semver)
- linguagem do serviço
- produto ao qual o serviço pertence
Exemplo:
name = "alert"
type = "grpc"
version = "v0.1.0"
language = "go"
product = "SDS"
Variáveis de ambiente
Serviços podem precisar de variáveis de ambiente específicas a ele. Essas variáveis devem ser declaradas também neste arquivo de configuração, e permitir que seja possível validar a existência delas ou não durante a inicialização do serviço.
Essas variáveis são declaradas no objeto envs
, da seguinte maneira:
name = "alert"
type = "grpc"
version = "v0.1.0"
language = "go"
product = "SDS"
envs = [ "VARIABLE_1", "VARIABLE_2" ]
Nível inicial das mensagens de log
É possível ajustar o nível inicial das mensagens de log exibidas por um serviço. O objeto log_level permite ajustar essa informação da seguinte maneira:
name = "alert"
type = "grpc"
version = "v0.1.0"
language = "go"
product = "SDS"
log_level = "debug"
Atualmente, os seguintes valores são suportados:
- debug
- info
- warn
- error
Configurações customizadas de um serviço
Uma seção especial com o nome service está disponível para adição de configurações customizadas de um serviço, que são acessíveis somente dentro dele.
Essas configurações são carregadas pelo Mikros, sendo disponibilizadas através da API Service.CustomDefinitions
, sendo devolvidas no formato map[string]interface{}
.
Exemplo:
name = "alert"
type = "grpc"
version = "v0.1.0"
language = "go"
product = "SDS"
[service]
custom_definition_1 = "Hello World!"
custom_definition_2 = 42
Essas informações estarão disponíveis ao serviço da seguinte maneira:
type server struct {
*mikros.Service
}
func (s *server) Foo() {
cfg := s.Service.CustomDefinitions()
customDefinition1 := cfg["custom_definition_1"].(string)
customDefinition2 := cfg["custom_definition_2"].(int)
}
Alterando host e porta de destino de serviços acoplados
Eventualmente pode surgir a necessidade de que seja necessário ter um hostname e uma porta customizadas para acessar determinado serviço acoplado ao próprio serviço. Por padrão, o Mikros utiliza valores fixos para estas informações (que podem ser alteradas via variáveis de ambiente).
Para sobrepor estes valores e permitir estabelecer conexão de forma customizada, o arquivo de configurações do serviço fornece a seção clients com este objetivo. Internamente, por se tratar um objeto do tipo mapa, ele pode ser utilizado da seguinte maneira:
name = "alert"
type = "grpc"
version = "v0.1.0"
language = "go"
product = "SDS"
[clients.service_name]
host = "localhost"
port = 10942
Features
Por padrão, toda feature fornecida pelo Mikros é inicializada desabilitada no serviço. Desta maneira, é necessário que elas sejam "ligadas" explícitamente para utilização.
Toda feature é sempre acessada por um objeto principal chamado de features. O exemplo a seguir mostra como "ligar" a feature de tracing de um determinado serviço:
name = "alert"
type = "grpc"
version = "v0.1.0"
language = "go"
product = "SDS"
[features.tracing]
enabled = true