Ciclo de vida da aplicação
O ponto de entrada de uma aplicação Colibri é explícito: primeiro inicializamos os componentes básicos, depois os módulos opcionais e, por último, o processo que mantém a aplicação em execução.
Ordem de inicialização
package main
import (
"github.com/colibriproject-dev/colibri-sdk-go"
"github.com/colibriproject-dev/colibri-sdk-go/pkg/database/cacheDB"
"github.com/colibriproject-dev/colibri-sdk-go/pkg/database/sqlDB"
"github.com/colibriproject-dev/colibri-sdk-go/pkg/web/restserver"
)
func main() {
colibri.InitializeApp()
sqlDB.Initialize()
cacheDB.Initialize()
restserver.AddRoutes(routes)
restserver.ListenAndServe()
}
colibri.InitializeApp() executa, nesta ordem:
- carrega e valida as variáveis de ambiente;
- configura logging;
- registra as validações padrão;
- prepara o encerramento por sinais do sistema;
- inicializa o monitoramento;
- configura o provedor de cloud.
Os módulos de SQL, cache, mensageria e storage são opcionais. Inicialize apenas os que a aplicação usa.
Funções de módulos opcionais dependem de sua respectiva inicialização. Por exemplo, uma chamada a sqlDB.NewQuery antes de sqlDB.Initialize() retorna erro de banco não inicializado.
Encerramento
O servidor, SQL, cache e monitoramento registram seus próprios observadores de encerramento. Para um recurso criado pela aplicação, implemente observer.Observer e registre-o:
type worker struct{}
func (worker) Close() {
// Interrompa consumidores e libere recursos.
}
observer.Attach(worker{})
Consulte encerramento seguro para processos em segundo plano.