github.heygears.com/openimsdk/tools@v0.0.49/mq/kafka/sarama.go (about)

     1  package kafka
     2  
     3  import (
     4  	"bytes"
     5  	"strings"
     6  
     7  	"github.com/IBM/sarama"
     8  	"github.com/openimsdk/tools/errs"
     9  )
    10  
    11  func BuildConsumerGroupConfig(conf *Config, initial int64, autoCommitEnable bool) (*sarama.Config, error) {
    12  	kfk := sarama.NewConfig()
    13  	kfk.Version = sarama.V2_0_0_0
    14  	kfk.Consumer.Offsets.Initial = initial
    15  	kfk.Consumer.Offsets.AutoCommit.Enable = autoCommitEnable
    16  	kfk.Consumer.Return.Errors = false
    17  	if conf.Username != "" || conf.Password != "" {
    18  		kfk.Net.SASL.Enable = true
    19  		kfk.Net.SASL.User = conf.Username
    20  		kfk.Net.SASL.Password = conf.Password
    21  	}
    22  	if conf.TLS.EnableTLS {
    23  		tls, err := newTLSConfig(conf.TLS.ClientCrt, conf.TLS.ClientKey, conf.TLS.CACrt, []byte(conf.TLS.ClientKeyPwd), conf.TLS.InsecureSkipVerify)
    24  		if err != nil {
    25  			return nil, err
    26  		}
    27  		kfk.Net.TLS.Config = tls
    28  		kfk.Net.TLS.Enable = true
    29  	}
    30  	return kfk, nil
    31  }
    32  
    33  func NewConsumerGroup(conf *sarama.Config, addr []string, groupID string) (sarama.ConsumerGroup, error) {
    34  	cg, err := sarama.NewConsumerGroup(addr, groupID, conf)
    35  	if err != nil {
    36  		return nil, errs.WrapMsg(err, "NewConsumerGroup failed", "addr", addr, "groupID", groupID, "conf", *conf)
    37  	}
    38  	return cg, nil
    39  }
    40  
    41  func BuildProducerConfig(conf Config) (*sarama.Config, error) {
    42  	kfk := sarama.NewConfig()
    43  	kfk.Producer.Return.Successes = true
    44  	kfk.Producer.Return.Errors = true
    45  	kfk.Producer.Partitioner = sarama.NewHashPartitioner
    46  	if conf.Username != "" || conf.Password != "" {
    47  		kfk.Net.SASL.Enable = true
    48  		kfk.Net.SASL.User = conf.Username
    49  		kfk.Net.SASL.Password = conf.Password
    50  	}
    51  	switch strings.ToLower(conf.ProducerAck) {
    52  	case "no_response":
    53  		kfk.Producer.RequiredAcks = sarama.NoResponse
    54  	case "wait_for_local":
    55  		kfk.Producer.RequiredAcks = sarama.WaitForLocal
    56  	case "wait_for_all":
    57  		kfk.Producer.RequiredAcks = sarama.WaitForAll
    58  	default:
    59  		kfk.Producer.RequiredAcks = sarama.WaitForAll
    60  	}
    61  	if conf.CompressType == "" {
    62  		kfk.Producer.Compression = sarama.CompressionNone
    63  	} else {
    64  		if err := kfk.Producer.Compression.UnmarshalText(bytes.ToLower([]byte(conf.CompressType))); err != nil {
    65  			return nil, errs.WrapMsg(err, "UnmarshalText failed", "compressType", conf.CompressType)
    66  		}
    67  	}
    68  	if conf.TLS.EnableTLS {
    69  		tls, err := newTLSConfig(conf.TLS.ClientCrt, conf.TLS.ClientKey, conf.TLS.CACrt, []byte(conf.TLS.ClientKeyPwd), conf.TLS.InsecureSkipVerify)
    70  		if err != nil {
    71  			return nil, err
    72  		}
    73  		kfk.Net.TLS.Config = tls
    74  		kfk.Net.TLS.Enable = true
    75  	}
    76  	return kfk, nil
    77  }
    78  
    79  func NewProducer(conf *sarama.Config, addr []string) (sarama.SyncProducer, error) {
    80  	producer, err := sarama.NewSyncProducer(addr, conf)
    81  	if err != nil {
    82  		return nil, errs.WrapMsg(err, "NewSyncProducer failed", "addr", addr, "conf", *conf)
    83  	}
    84  	return producer, nil
    85  }