Skip to content

Commit 64c00ef

Browse files
feat: adds desafio_2
1 parent 9997279 commit 64c00ef

11 files changed

Lines changed: 322 additions & 0 deletions

File tree

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
FROM golang:1.15
2+
3+
WORKDIR /go/src
4+
ENV PATH="/go/bin:${PATH}"
5+
ENV GO111MODULE=on
6+
ENV CGO_ENABLED=1
7+
8+
RUN apt-get update && \
9+
apt-get install build-essential protobuf-compiler librdkafka-dev -y && \
10+
go get google.golang.org/grpc/cmd/protoc-gen-go-grpc && \
11+
go get google.golang.org/protobuf/cmd/protoc-gen-go && \
12+
go get github.com/spf13/cobra/cobra && \
13+
wget https://github.com/ktr0731/evans/releases/download/0.9.1/evans_linux_amd64.tar.gz && \
14+
tar -xzvf evans_linux_amd64.tar.gz && \
15+
mv evans ../bin && rm -f evans_linux_amd64.tar.gz
16+
17+
CMD ["tail", "-f", "/dev/null"]
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
version: "3"
2+
3+
services:
4+
app:
5+
build: .
6+
volumes:
7+
- .:/go/src/
8+
9+
db:
10+
image: postgres:9.4
11+
restart: always
12+
tty: true
13+
volumes:
14+
- .pgdata:/var/lib/postgresql/data
15+
environment:
16+
- POSTGRES_PASSWORD=root
17+
- POSTGRES_DB=codepix
18+
ports:
19+
- "5432:5432"
20+
21+
zookeeper:
22+
image: confluentinc/cp-zookeeper:latest
23+
environment:
24+
ZOOKEEPER_CLIENT_PORT: 2181
25+
26+
kafka:
27+
image: confluentinc/cp-kafka:latest
28+
depends_on:
29+
- zookeeper
30+
ports:
31+
- "9092:9092"
32+
- "9094:9094"
33+
environment:
34+
KAFKA_BROKER_ID: 1
35+
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
36+
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
37+
KAFKA_INTER_BROKER_LISTENER_NAME: INTERNAL
38+
KAFKA_LISTENERS: INTERNAL://:9092,OUTSIDE://:9094
39+
KAFKA_ADVERTISED_LISTENERS: INTERNAL://kafka:9092,OUTSIDE://host.docker.internal:9094
40+
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INTERNAL:PLAINTEXT,OUTSIDE:PLAINTEXT
41+
extra_hosts:
42+
- "host.docker.internal:172.17.0.1"
43+
44+
kafka-topics-generator:
45+
image: confluentinc/cp-kafka:latest
46+
depends_on:
47+
- kafka
48+
command: >
49+
bash -c
50+
"sleep 5s &&
51+
kafka-topics --create --topic=transactions --if-not-exists --bootstrap-server=kafka:9092 &&
52+
kafka-topics --create --topic=transaction-confirmation --if-not-exists --bootstrap-server=kafka:9092 &&
53+
kafka-topics --create --topic=bank001 --if-not-exists --bootstrap-server=kafka:9092 &&
54+
kafka-topics --create --topic=bank002 --if-not-exists --bootstrap-server=kafka:9092"
55+
extra_hosts:
56+
- "host.docker.internal:172.17.0.1"
57+
58+
control-center:
59+
image: confluentinc/cp-enterprise-control-center:6.0.1
60+
hostname: control-center
61+
depends_on:
62+
- kafka
63+
ports:
64+
- "9021:9021"
65+
environment:
66+
CONTROL_CENTER_BOOTSTRAP_SERVERS: 'kafka:9092'
67+
CONTROL_CENTER_REPLICATION_FACTOR: 1
68+
PORT: 9021
69+
70+
pgadmin:
71+
image: dpage/pgadmin4
72+
tty: true
73+
environment:
74+
- PGADMIN_DEFAULT_EMAIL=admin@user.com
75+
- PGADMIN_DEFAULT_PASSWORD=123456
76+
ports:
77+
- "9000:80"
78+
depends_on:
79+
- db
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
module github.com/patricksferraz/learning/immersion-fullcycle/desafio_1
2+
3+
go 1.15
4+
5+
require (
6+
github.com/asaskevich/govalidator v0.0.0-20200907205600-7a23bdc65eef
7+
github.com/satori/go.uuid v1.2.0
8+
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect
9+
)
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
github.com/asaskevich/govalidator v0.0.0-20200907205600-7a23bdc65eef h1:46PFijGLmAjMPwCCCo7Jf0W6f9slllCkkv7vyc1yOSg=
2+
github.com/asaskevich/govalidator v0.0.0-20200907205600-7a23bdc65eef/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw=
3+
github.com/kr/pretty v0.2.1 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI=
4+
github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
5+
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
6+
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
7+
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
8+
github.com/satori/go.uuid v1.2.0 h1:0uYX9dsZ2yD7q2RtLRtPSdGDWzjeM3TbMJP9utgA0ww=
9+
github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0=
10+
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
11+
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
FROM golang:1.15
2+
3+
WORKDIR /go/src
4+
ENV PATH="/go/bin:${PATH}"
5+
ENV GO111MODULE=on
6+
ENV CGO_ENABLED=1
7+
8+
RUN apt-get update && \
9+
apt-get install build-essential protobuf-compiler librdkafka-dev -y && \
10+
go get google.golang.org/grpc/cmd/protoc-gen-go-grpc && \
11+
go get google.golang.org/protobuf/cmd/protoc-gen-go && \
12+
go get github.com/spf13/cobra/cobra && \
13+
wget https://github.com/ktr0731/evans/releases/download/0.9.1/evans_linux_amd64.tar.gz && \
14+
tar -xzvf evans_linux_amd64.tar.gz && \
15+
mv evans ../bin && rm -f evans_linux_amd64.tar.gz
16+
17+
CMD ["tail", "-f", "/dev/null"]
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
version: "3"
2+
3+
services:
4+
app:
5+
build: .
6+
volumes:
7+
- .:/go/src/
8+
9+
db:
10+
image: postgres:9.4
11+
restart: always
12+
tty: true
13+
volumes:
14+
- .pgdata:/var/lib/postgresql/data
15+
environment:
16+
- POSTGRES_PASSWORD=root
17+
- POSTGRES_DB=codepix
18+
ports:
19+
- "5432:5432"
20+
21+
zookeeper:
22+
image: confluentinc/cp-zookeeper:latest
23+
environment:
24+
ZOOKEEPER_CLIENT_PORT: 2181
25+
26+
kafka:
27+
image: confluentinc/cp-kafka:latest
28+
depends_on:
29+
- zookeeper
30+
ports:
31+
- "9092:9092"
32+
- "9094:9094"
33+
environment:
34+
KAFKA_BROKER_ID: 1
35+
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
36+
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
37+
KAFKA_INTER_BROKER_LISTENER_NAME: INTERNAL
38+
KAFKA_LISTENERS: INTERNAL://:9092,OUTSIDE://:9094
39+
KAFKA_ADVERTISED_LISTENERS: INTERNAL://kafka:9092,OUTSIDE://host.docker.internal:9094
40+
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INTERNAL:PLAINTEXT,OUTSIDE:PLAINTEXT
41+
extra_hosts:
42+
- "host.docker.internal:172.17.0.1"
43+
44+
kafka-topics-generator:
45+
image: confluentinc/cp-kafka:latest
46+
depends_on:
47+
- kafka
48+
command: >
49+
bash -c
50+
"sleep 5s &&
51+
kafka-topics --create --topic=transactions --if-not-exists --bootstrap-server=kafka:9092 &&
52+
kafka-topics --create --topic=transaction-confirmation --if-not-exists --bootstrap-server=kafka:9092 &&
53+
kafka-topics --create --topic=bank001 --if-not-exists --bootstrap-server=kafka:9092 &&
54+
kafka-topics --create --topic=bank002 --if-not-exists --bootstrap-server=kafka:9092"
55+
extra_hosts:
56+
- "host.docker.internal:172.17.0.1"
57+
58+
control-center:
59+
image: confluentinc/cp-enterprise-control-center:6.0.1
60+
hostname: control-center
61+
depends_on:
62+
- kafka
63+
ports:
64+
- "9021:9021"
65+
environment:
66+
CONTROL_CENTER_BOOTSTRAP_SERVERS: 'kafka:9092'
67+
CONTROL_CENTER_REPLICATION_FACTOR: 1
68+
PORT: 9021
69+
70+
pgadmin:
71+
image: dpage/pgadmin4
72+
tty: true
73+
environment:
74+
- PGADMIN_DEFAULT_EMAIL=admin@user.com
75+
- PGADMIN_DEFAULT_PASSWORD=123456
76+
ports:
77+
- "9000:80"
78+
depends_on:
79+
- db
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
module github.com/patricksferraz/learning/immersion-fullcycle/desafio_2
2+
3+
go 1.15
4+
5+
require github.com/confluentinc/confluent-kafka-go v1.5.2
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
github.com/confluentinc/confluent-kafka-go v1.5.2 h1:l+qt+a0Okmq0Bdr1P55IX4fiwFJyg0lZQmfHkAFkv7E=
2+
github.com/confluentinc/confluent-kafka-go v1.5.2/go.mod h1:u2zNLny2xq+5rWeTQjFHbDzzNuba4P1vo31r9r4uAdg=
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package kafka
2+
3+
import (
4+
"fmt"
5+
6+
ckafka "github.com/confluentinc/confluent-kafka-go/kafka"
7+
)
8+
9+
type KafkaConsumer struct {
10+
}
11+
12+
func NewKafkaConsumer() *KafkaConsumer {
13+
return &KafkaConsumer{}
14+
}
15+
16+
func (k *KafkaConsumer) Consume() {
17+
configMap := &ckafka.ConfigMap{
18+
"bootstrap.servers": "kafka:9092",
19+
"group.id": "consumergroup",
20+
"auto.offset.reset": "earliest",
21+
}
22+
c, err := ckafka.NewConsumer(configMap)
23+
24+
if err != nil {
25+
panic(err)
26+
}
27+
28+
topics := []string{"test"}
29+
c.SubscribeTopics(topics, nil)
30+
31+
fmt.Println("kafka consumer has been started")
32+
for {
33+
msg, err := c.ReadMessage(-1)
34+
if err == nil {
35+
fmt.Println(string(msg.Value))
36+
}
37+
}
38+
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package kafka
2+
3+
import (
4+
"fmt"
5+
6+
ckafka "github.com/confluentinc/confluent-kafka-go/kafka"
7+
)
8+
9+
func NewKafkaProducer() (*ckafka.Producer, error) {
10+
configMap := &ckafka.ConfigMap{
11+
"bootstrap.servers": "kafka:9092",
12+
}
13+
p, err := ckafka.NewProducer(configMap)
14+
if err != nil {
15+
return nil, err
16+
}
17+
return p, nil
18+
}
19+
20+
func Publish(msg string, topic string, producer *ckafka.Producer, deliveryChan chan ckafka.Event) error {
21+
message := &ckafka.Message{
22+
TopicPartition: ckafka.TopicPartition{Topic: &topic, Partition: ckafka.PartitionAny},
23+
Value: []byte(msg),
24+
}
25+
err := producer.Produce(message, deliveryChan)
26+
if err != nil {
27+
return err
28+
}
29+
return nil
30+
}
31+
32+
func DeliveryReport(deliveryChan chan ckafka.Event) {
33+
for e := range deliveryChan {
34+
switch ev := e.(type) {
35+
case *ckafka.Message:
36+
if ev.TopicPartition.Error != nil {
37+
fmt.Println("Delivery failed:", ev.TopicPartition)
38+
} else {
39+
fmt.Println("Delivery message to:", ev.TopicPartition)
40+
}
41+
}
42+
}
43+
}

0 commit comments

Comments
 (0)