go Kafka使用

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())

先会使用,后续再仔细研究。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值