71 lines
1.8 KiB
Go
71 lines
1.8 KiB
Go
// Package message...
|
|
//
|
|
// Description : 基于kafka实现消息队列
|
|
//
|
|
// Author : go_developer@163.com<白茶清欢>
|
|
//
|
|
// Date : 2021-09-23 11:09 下午
|
|
package message
|
|
|
|
import (
|
|
"git.zhangdeman.cn/zhangdeman/gopkg/middleware/kafka"
|
|
"github.com/pkg/errors"
|
|
)
|
|
|
|
// NewMessageQueueWithKafka 获取基于kafka消息队列的实例
|
|
//
|
|
// Author : go_developer@163.com<白茶清欢>
|
|
//
|
|
// Date : 11:11 下午 2021/9/23
|
|
func NewMessageQueueWithKafka(producer kafka.Producer, consumer kafka.Consumer, sync bool, dataHandler IKafkaMessageHandler) IMessageQueue {
|
|
return &QueueWithKafka{
|
|
producer: producer,
|
|
consumer: consumer,
|
|
sync: sync,
|
|
dataHandler: dataHandler,
|
|
}
|
|
}
|
|
|
|
// QueueWithKafka 基于kafka的消息队列
|
|
//
|
|
// Author : zhangdeman001@ke.com<张德满>
|
|
//
|
|
// Date : 11:10 下午 2021/9/23
|
|
type QueueWithKafka struct {
|
|
producer kafka.Producer // 生产者
|
|
consumer kafka.Consumer // 消费者
|
|
sync bool // 同步发消息 or 异步
|
|
dataHandler IKafkaMessageHandler // 订阅到的数据处理方法
|
|
}
|
|
|
|
// Publish 发布消息
|
|
//
|
|
// Author : go_developer@163.com<白茶清欢>
|
|
//
|
|
// Date : 11:17 下午 2021/9/23
|
|
func (q *QueueWithKafka) Publish(data interface{}) error {
|
|
var (
|
|
ok bool
|
|
publishData kafka.ProducerData
|
|
publishResult kafka.ProducerResult
|
|
)
|
|
if publishData, ok = data.(kafka.ProducerData); !ok {
|
|
return errors.New("data format is not kafka.ProducerData")
|
|
}
|
|
if q.sync {
|
|
publishResult = q.producer.Sync(publishData)
|
|
} else {
|
|
publishResult = q.producer.Async(publishData)
|
|
}
|
|
return publishResult.Err
|
|
}
|
|
|
|
// Subscribe 订阅消息
|
|
//
|
|
// Author : go_developer@163.com<白茶清欢>
|
|
//
|
|
// Date : 11:17 下午 2021/9/23
|
|
func (q *QueueWithKafka) Subscribe() {
|
|
q.consumer.Consume(q.dataHandler)
|
|
}
|