1.参数文件
func DurationHandleTopic(env goo.Env) string {
return fmt.Sprintf("smartcard-duration-log-v2-%s", env.Tag())
}
type DurationHandleMsg struct {
// 需要什么写什么
AudioId int64 // 录音ID
EnterpriseId int64 // 企业ID
}
func (this *DurationHandleMsg) Serialize() []byte {
b, _ := json.Marshal(&this)
return b
}
func (this *DurationHandleMsg) Deserialize(b []byte) {
_ = json.Unmarshal(b, this)
return
}
2.逻辑文件
主逻辑文件:
type DurationHandle struct {
Msg *kafka.DurationHandleMsg
}
// 日志
func (this DurationHandle) log() *goo_log.Entry {
return goo_log.WithTag("duration-handle").WithField("msg", this.Msg)
}
func (this DurationHandle) Run(topic string, b []byte) {
// 初始化
{
this.Msg = &kafka.DurationHandleMsg{}
this.Msg.Deserialize(b)
}
// todo 在这写逻辑
}
完成后发送msg,或别的文件向此文件发送msg:
// Duration-handle kafka
func (this JsonHandle) sendKafka() bool {
body := kafka.DurationHandleMsg{
AudioId: this.Msg.AudioId,
EnterpriseId: this.Msg.EnterpriseId,
}
_, _, err := goo_kafka.Producer().SendMessage(kafka.DurationHandleTopic(config.Conf.Env), body.Serialize())
if err != nil {
return false
}
return true
}
调用:
if ok := this.sendKafka(); !ok {
return
}
3.Consumer文件夹
consume.go:
func Consume() {
var (
topics []string
groupId = fmt.Sprintf("smart-card-v2-%s", config.Conf.Env.Tag())
topicConsumers = map[string][]iConsumer{
kafka.DurationHandleTopic(config.Conf.Env): {
service.DurationHandle{},
},
}
)
for topic := range topicConsumers {
topics = append(topics, topic)
}
goo_kafka.Consumer().ConsumeGroup(groupId, topics, handler(topicConsumers))
}
consumer.go:
type iConsumer interface {
Run(topic string, b []byte)
}
handler.go:
func handler(topicConsumers map[string][]iConsumer) goo_kafka.ConsumerHandler {
return func(msg *goo_kafka.ConsumerMessage, consumerErr *goo_kafka.ConsumerError) (err error) {
if consumerErr != nil {
err = consumerErr
return
}
consumers, ok := topicConsumers[msg.Topic]
if !ok {
return
}
if l := len(consumers); l == 0 {
return
}
for _, consumer := range consumers {
goo_log.WithTag(msg.Topic).WithField("msg", string(msg.Value)).Debug()
consumer.Run(msg.Topic, msg.Value)
}
return
}
}
4.初始化Kafka
main.go:
goo_kafka.Init(config.Conf.Kafka)
.yaml:
kafka:
addrs:
- "ip:端口"
user: "admin"
password: "*"
test.go:
goo_kafka.Init(goo_kafka.Config{
User: "admin",
Password: "*",
Addrs: []string{"ip:端口"},
})
topic := kafka.DurationHandleTopic(goo.DEVELOPMENT)
msg := &kafka.DurationHandleMsg{
AudioId: 236,
EnterpriseId: 4,
}
goo_kafka.Producer().SendMessage(topic, msg.Serialize())
先会使用,后续再仔细研究。