Imagine que você trabalha para uma grande editora de notícias chamada Fairflax Media , inspirada na flor de linho (não confundir com a Fairfax Media, é claro).
Você foi encarregado de dividir o enorme sistema monolítico em microsserviços e mover tudo para Kuberentes. Você prefere um design orientado a domínio e acredita que cada banco de dados só deve pertencer a um único aplicativo. Mas com o passar do tempo, você percebe que muitos serviços precisam de dados comuns. Você precisa ter certeza de que os dados são consistentes em todos os serviços e que o desempenho da consulta é razoável.
master
contém o estado inicial - serviços fortemente acoplados.event-sourcing
deve conter a implementação Event Sourcing + CQRS, contendo serviços assíncronos, independentes e fáceis de testar.Este projeto é destinado a qualquer pessoa disposta a mudar para uma arquitetura de microsserviço assíncrona usando Golang.
Vá para 1.9 ou posterior
$GOPATH
está definido
dep
para gerenciar dependências
No Mac OSX usando brew
...
$ brew install dep
$ brew upgrade dep
Em outras plataformas você pode usar o script install.sh:
$ curl https://raw.githubusercontent.com/golang/dep/master/install.sh | sh
Adicione garantir que o PATH contenha $GOPATH/bin
$ go help gopath
$ export PATH=$PATH:$GOPATH/bin
$ go get -u github.com/pavelnikolov/eventsourcing-go/demo-articles
$ go get -u github.com/pavelnikolov/eventsourcing-go/demo-graph
$ go get -u github.com/pavelnikolov/eventsourcing-go/demo-sitemap
$ go get -u github.com/pavelnikolov/eventsourcing-go/demo-rss
Qualquer:
$ go get -u github.com/pavelnikolov/eventsourcing-go/...
Ou:
$ mkdir -p $GOPATH/github.com/pavelnikolov
$ cd $GOPATH/github.com/pavelnikolov
$ git clone github.com/pavelnikolov/eventsourcing-go
Em seguida instale as dependências:
$ dep ensure
Execute em quatro janelas de terminal diferentes:
go install ./cmd/demo-articles && demo-articles
go install ./cmd/demo-graph && demo-graph
go install ./cmd/demo-rss && demo-rss
go install ./cmd/demo-sitemap && demo-sitemap
Navegue até os aplicativos em seu navegador:
Instale o compilador protobuf
Instale o plugin protoc Go
$ go get -u github.com/golang/protobuf/protoc-gen-go
Reconstrua o código Go gerado
$ go generate github.com/pavelnikolov/eventsourcing-go/...
Ou execute o comando protoc
(com o plugin grpc)
$ protoc -I publishing/ publishing/publishing.proto --go_out=plugins=grpc:publishing