This is a simple example of microservice, we are using the event driven architecture, this is a typical consumer.
The master branch uses RabbitMQ, the branch sns-1
we change the broker to sns instead rabbitmq, see more details here.
For more details of producer, see the example here: https://github.com/felipegirotti/spring-boot-event-driven-producer
We expose the data via gRPC. The protofile
To more details about how SNS works click here
First, change the branch for sns-1
You need setup into AWS:
- create a SNS topic
- create a SQS to subscribe the SNS
- create a user with the permission to send to SNS
Use your credentials into the proper env vars and the topic name
SQS_QUEUE_NAME={{YOUR_QUEUE_NAME}}
AWS_CREDENTIAL_KEY_ID={{YOUR_KEY_ID}}
AWS_CREDENTIAL_SECRET={{YOUR_SECRET}}
AWS_REGION_STATIC={{YOU_REGION}}
The region should be capitalize e.g US-WEST-2
We are using env variables to setup the database properties and others configs
See the .env.example and export your variables.
e.g:
export $(cat .env.example | xargs)
Some configurations is necessary before (Mappings and Enable to write in the ElasticSearch)
PUT /clients
{
"mappings": {
"client": {
"properties": {
"id": {"type": "long"},
"location": {"type": "geo_point"},
"name": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
}
}
}
PUT /places
{
"mappings": {
"place": {
"properties": {
"id": {"type": "long"},
"name": { "type": "text" },
"client_id": {"type": "long"},
"location": {"type": "geo_point"}
}
}
}
}
PUT /_settings
{
"index": {
"blocks": {
"read_only_allow_delete": "false"
}
}
}
PUT /_bulk
{ "index" : { "_index" : "places", "_type" : "place", "_id" : "1" } }
{"id": 1, "name":"DRZ Geotecnologia e Consultoria","client_id":1,"location":{"lat":-23.3103803,"lon":-51.1658525}}
{ "index" : { "_index" : "places", "_type" : "place", "_id" : "2" } }
{"id": 2,"name":"Itau agencia higienopolis","client_id":1,"location":{"lat":-23.3103803,"lon":-51.1763226}}
{ "index" : { "_index" : "places", "_type" : "place", "_id" : "3" } }
{"id": 3, "name":"Banco do Brasil Estilo","client_id":1,"location":{"lat":-23.3103803,"lon":-51.1667319}}
{ "index" : { "_index" : "places", "_type" : "place", "_id" : "4" } }
{"id": 4, "name":"Caixa Ecomonica Federal","client_id":1,"location":{"lat":-23.3114913,"lon":-51.1660693}}
{ "index" : { "_index" : "places", "_type" : "place", "_id" : "5" } }
{"id": 5, "name":"Bradesco Minas Gerais","client_id":1,"location":{"lat":-23.3116208,"lon":-51.1572625}}
{ "index" : { "_index" : "places", "_type" : "place", "_id" : "6" } }
{"id": 6, "name":"Banco Do Brasil Mato Grosso","client_id":1,"location":{"lat":-23.3116208,"lon":-51.1572625}}
GET /places/place/_search?size=10
{
"query": {
"bool" : {
"must" : {
"match_all" : {}
},
"filter" : {
"geo_distance" : {
"distance" : "500m",
"location" : {
"lat" : -23.3103803,
"lon" : -51.1658525
}
}
}
}
}
}