conn

package
v1.0.8 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 3, 2024 License: AGPL-3.0 Imports: 28 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type CustomDMText

type CustomDMText struct{}

CustomDMText 实现ICustomDriverValueConver接口,扩展自定义类型,例如 达梦数据库TEXT类型,映射出来的是dm.DmClob类型,无法使用string类型直接接收

func (CustomDMText) ConverDriverValue

func (dmtext CustomDMText) ConverDriverValue(ctx context.Context, columnType *sql.ColumnType, tempDriverValue driver.Value, structFieldType *reflect.Type) (interface{}, error)

ConverDriverValue 数据库列类型,GetDriverValue返回的driver.Value的临时接收值,struct属性类型 map接收或者字段不存在,无法获取到structFieldType,会传入nil 返回符合接收类型值的指针,指针,指针!!!!

func (CustomDMText) GetDriverValue

func (dmtext CustomDMText) GetDriverValue(ctx context.Context, columnType *sql.ColumnType, structFieldType *reflect.Type) (driver.Value, error)

GetDriverValue 根据数据库列类型,返回driver.Value的实例,struct属性类型 map接收或者字段不存在,无法获取到structFieldType,会传入nil

type EtcdClient

type EtcdClient struct {
	Conf model.EtcdConf
	Conn *clientv3.Client
	Err  error
}

func (*EtcdClient) Close

func (e *EtcdClient) Close()

Close 关闭etcd的连接

func (*EtcdClient) NewEtcdClient

func (e *EtcdClient) NewEtcdClient()

NewEtcdClient 创建etcd的客户端

func (*EtcdClient) Parse

func (e *EtcdClient) Parse(key string, v interface{}) error

Parse 解析etcd内的value

func (*EtcdClient) Put added in v1.0.1

func (e *EtcdClient) Put(key string, data interface{}) error

etcd 键入key value 创建你的数据

data := YourData{
	Field1: "Value1",
	Field2: 42,
	// Initialize other fields as needed
}

type KfkClient added in v1.0.6

type KfkClient struct {
	Producer *kfk.Writer
	Consumer *kfk.Reader
}

func (*KfkClient) NewKafkaConsumer added in v1.0.6

func (kfc *KfkClient) NewKafkaConsumer(user, pwd, topic, groupID string, nodes []string) (err error)

创建kafka的消费者

func (*KfkClient) NewKafkaProducer added in v1.0.6

func (kfc *KfkClient) NewKafkaProducer(user, pwd, topic, node string) (err error)

创建kafka的生产者

func (*KfkClient) Reade added in v1.0.6

func (kfc *KfkClient) Reade() (Key, msg []byte, err error)

func (*KfkClient) TopicCreate added in v1.0.6

func (kfc *KfkClient) TopicCreate(topicName, nodes string) (err error)

func (*KfkClient) TopicList added in v1.0.6

func (kfc *KfkClient) TopicList(nodes string) (err error)

func (*KfkClient) Write added in v1.0.6

func (kfc *KfkClient) Write(key, msg []byte) (err error)

type MinioClient

type MinioClient struct {
	Conf model.MinioConf
	Conn *minio.Client
	Err  error
}

func (*MinioClient) NewMinioClient

func (mn *MinioClient) NewMinioClient()

func (*MinioClient) SetBucketLifecycle

func (mn *MinioClient) SetBucketLifecycle(bucketName string, expirationDays int)

type NatsClient

type NatsClient struct {
	Conf model.NatsConf
	Conn *nats.Conn
	Err  error
}

func (*NatsClient) ChanQueueSubscribe

func (n *NatsClient) ChanQueueSubscribe(subj, queue string, msgHandle func(data []byte))

ChanQueueSubscribe 通道订阅模式,用于排序处理消息,单次订阅

func (*NatsClient) ChanSubscribe

func (n *NatsClient) ChanSubscribe(subj string, msgHandle func(data []byte))

ChanSubscribe 通道订阅模式,用于排序处理消息,多次订阅

func (*NatsClient) Close

func (n *NatsClient) Close()

func (*NatsClient) NewNatsClient

func (nc *NatsClient) NewNatsClient()

NewNatsClient 创建nats的客户端

func (*NatsClient) Publish

func (n *NatsClient) Publish(subj, queue string, msg interface{})

Publish 发布消息到nats

func (*NatsClient) QueueSubscribe

func (n *NatsClient) QueueSubscribe(subj, queue string, msgHandle func(data []byte))

QueueSubscribe 队列形式的订阅,只消费一次,多服务时使用,多用于goroutine 所以错误日志内部处理

func (*NatsClient) Subscribe

func (n *NatsClient) Subscribe(subj string, msgHandle func(data []byte))

Subscribe 普通订阅,可多次消费,单节点时使用,多用于goroutine 所以错误日志内部处理

type RabbitMQ added in v1.0.6

type RabbitMQ struct {
	QueueName string //队列名称
	Exchange  string //交换机名称
	Key       string //bind Key 名称
	MQUrl     string //连接信息
	// contains filtered or unexported fields
}

RabbitMQ rabbitMQ结构体

func NewRabbitMQ added in v1.0.6

func NewRabbitMQ(mqUrl, queueName, exchange, key string) *RabbitMQ

NewRabbitMQ 创建结构体实例

func NewRabbitMQPub added in v1.0.6

func NewRabbitMQPub(mqUrl, exchangeName string) *RabbitMQ
---------------------------3.订阅模式-----------------------------------------

特点: 生产者将消息发送到一个交换机中,交换机将消息广播给所有绑定了该交换机的队列。 每个消息都会被交换机广播给所有绑定了该交换机的队列。

真实应用场景: 新闻推送系统:生产者将最新的新闻发布到交换机中,每个订阅者(消费者)都会收到相同的新闻。

优点: 实现了消息的广播功能,适用于多个消费者同时接收相同消息的场景。

缺点: 无法根据消费者的兴趣或条件选择性地接收消息。 ———————————————————————————————————————————————————————————————————————————————— NewRabbitMQPub 创建Pub模式下RabbitMQ实例 mqUrl = "amqp://user:pwd@ip:port/%2F"

func NewRabbitMQRouting added in v1.0.6

func NewRabbitMQRouting(mqUrl, exchangeName, routingKey string) *RabbitMQ
---------------------------4.路由模式-----------------------------------------

路由模式(Routing Mode)是消息队列中一种常见的消息路由模式,它允许消息的发送者(Producer)将消息发送到指定的交换机(Exchange),而交换机则根据消息的路由键(Routing Key)将消息路由到符合条件的队列(Queue)。路由模式提供了一种灵活的消息路由机制,使得消息的分发可以根据不同的路由规则进行定制。

优点: 灵活性高: 路由模式允许根据消息的属性或条件将消息路由到不同的队列或消费者,从而实现灵活的消息处理和路由策略。 解耦性强: 路由模式可以将消息的生产者和消费者解耦,使它们之间相互独立。生产者只需将消息发送到交换机,而不需要知道具体的消费者是谁,消费者也只需订阅感兴趣的消息,而不需要知道消息的生产者是谁,从而实现了系统的解耦。 灵活的消息过滤和路由: 路由模式允许根据消息的属性、标签或主题将消息路由到不同的队列或消费者,实现精确的消息过滤和路由,从而提高了系统的灵活性和可扩展性。 支持多种路由策略: 路由模式支持多种路由策略,如直连路由、主题路由、分发路由等,可以根据不同的业务需求选择合适的路由策略,从而满足不同的应用场景。

缺点: 配置复杂: 路由模式的配置相对复杂,需要定义交换机、队列和绑定关系,以及配置路由规则等,如果配置不当可能会导致消息路由错误或丢失。 性能损耗: 路由模式需要对消息进行额外的路由和过滤操作,可能会增加系统的消息处理延迟和性能消耗,特别是在消息量较大的情况下。 消息堆积风险: 如果路由模式配置不当或消息处理能力不足,可能会导致消息堆积的风险,从而影响系统的稳定性和可靠性。 维护成本高: 路由模式需要维护交换机、队列和绑定关系等配置信息,特别是在系统规模较大或消息路由策略较复杂的情况下,维护成本可能会较高。

使用场景: 微服务架构下的消息路由:在微服务架构中,不同的服务可能需要处理不同类型的消息。通过路由模式,可以将消息根据服务的需求进行路由,确保每个服务只接收到与其相关的消息,从而实现解耦和灵活性。 实时监控与日志分析:在监控系统或日志分析系统中,需要根据不同的指标或日志级别对数据进行分类和分析。路由模式可以根据数据的属性或标签将数据路由到不同的处理节点,以实现实时监控和日志分析。 任务调度与负载均衡:在任务调度系统中,任务可能具有不同的优先级或类型,需要根据任务的属性进行分发和调度。通过路由模式,可以将任务路由到不同的工作节点,实现任务的负载均衡和优先级调度。 多级消息过滤与订阅:在订阅发布系统中,订阅者可能对不同类型或主题的消息感兴趣。路由模式可以根据消息的属性或主题将消息路由到不同的订阅者,实现精确的消息过滤和订阅。 数据同步与复制:在分布式系统中,可能需要将数据复制到不同的节点或数据中心,以实现数据的备份和灾备。通过路由模式,可以将数据根据不同的条件进行路由和复制,确保数据的一致性和可靠性 ———————————————————————————————————————————————————————————————————————————————— NewRabbitMQRouting 路由模式 创建RabbitMQ实例 mqUrl = "amqp://user:pwd@ip:port/%2F"

func NewRabbitMQSimple added in v1.0.6

func NewRabbitMQSimple(mqUrl, queueName string) *RabbitMQ
---------------------------1.简单模式-----------------------------------------

特点: 生产者直接将消息发送到队列中,消费者从队列中获取消息并进行处理。 消息一旦被消费,就会从队列中移除。

真实应用场景: 电子邮件通知系统:生产者将待发送的邮件放入队列,消费者负责从队列中获取邮件并发送。

优点: 实现简单,易于理解和部署。 适用于单一消费者场景。

缺点: 没有消息持久化,一旦 RabbitMQ 服务器重启,队列中的消息将会丢失。 ———————————————————————————————————————————————————————————————————————————————— 创建简单模式下RabbitMQ实例 mqUrl = "amqp://user:pwd@ip:port/%2F"

func NewRabbitMQTopic added in v1.0.6

func NewRabbitMQTopic(mqUrl, exchangeName, routingKey string) *RabbitMQ
---------------------------5.Topic模式-----------------------------------------

话题模式(Topic Mode)是消息队列中一种高级的消息路由模式,它基于消息的主题(Topic)进行消息的订阅和分发。在话题模式中,消息的发送者(Producer)将消息发送到特定的主题,而消息的接收者(Consumer)则根据自己感兴趣的主题进行订阅,从而接收相关的消息。

工作原理: 主题定义: 在话题模式中,主题由一个或多个单词组成,每个单词之间用点号(.)分隔,例如:stock.usd.nyse。 通配符匹配: 话题模式支持两种通配符,分别是*(星号)和#(井号)。 *:表示匹配一个单词,例如:stock.*.nyse可以匹配stock.usd.nyse和stock.eur.nyse等。 #:表示匹配零个或多个单词,例如:stock.usd.#可以匹配stock.usd.nyse、stock.usd.nasdaq以及stock.usd等。 消息路由: 消息的发送者在发送消息时指定一个主题,而消息的接收者则可以使用通配符来订阅感兴趣的主题。消息队列根据主题的匹配规则将消息路由到符合条件的订阅者。

应用场景: 多级消息过滤: 话题模式可以根据消息的主题进行多级的消息过滤和匹配,从而实现精确的消息路由和分发。 发布/订阅系统: 话题模式常用于发布/订阅系统中,其中消息的发送者作为发布者,向不同的主题发送消息,而消息的接收者作为订阅者,根据自己的需求订阅感兴趣的主题。 事件驱动架构: 话题模式可以用于构建事件驱动的架构,其中各个服务之间通过消息队列进行事件的发布和订阅,从而实现服务之间的解耦和灵活的消息传递。

优点: 灵活性高: 话题模式支持灵活的主题定义和通配符匹配,可以根据不同的业务需求实现精确的消息路由和分发。 解耦性强: 话题模式可以将消息的生产者和消费者解耦,使它们之间相互独立,从而提高系统的可维护性和可扩展性。

缺点: 配置复杂: 话题模式的配置相对复杂,需要定义主题和通配符规则,并确保发送者和接收者之间的匹配规则一致,否则可能导致消息路由错误或丢失。 性能损耗: 话题模式需要对消息进行额外的匹配和路由操作,可能会增加系统的消息处理延迟和性能消耗,特别是在消息量较大的情况下 ———————————————————————————————————————————————————————————————————————————————— NewRabbitMQTopic topic模式 创建RabbitMQ实例 mqUrl = "amqp://user:pwd@ip:port/%2F"

func NewRabbitMQWork added in v1.0.6

func NewRabbitMQWork(mqUrl, queueName string) *RabbitMQ
---------------------------2.工作模式-----------------------------------------

特点: 多个消费者同时从同一个队列中获取消息并处理,每个消息只能被一个消费者处理。 消息在被消费者处理后会从队列中移除。

真实应用场景: 任务分发系统:多个消费者同时从队列中获取任务,每个消费者处理一个任务,以实现任务的负载均衡。

优点: 可以通过增加消费者来提高消息处理的并发性。

缺点: 没有消息持久化,一旦 RabbitMQ 服务器重启,队列中的消息将会丢失。 ———————————————————————————————————————————————————————————————————————————————— NewRabbitMQWork 创建work模式下RabbitMQ实例 mqUrl = "amqp://user:pwd@ip:port/%2F"

func (*RabbitMQ) ConsumePub added in v1.0.6

func (r *RabbitMQ) ConsumePub() (msgs <-chan amqp.Delivery)

ConsumePub pub 模式下消费者

func (*RabbitMQ) ConsumeRouting added in v1.0.6

func (r *RabbitMQ) ConsumeRouting() (msgs <-chan amqp.Delivery)

ConsumeRouting routing 模式下消费者 交换机类型:direct

func (*RabbitMQ) ConsumeSimple added in v1.0.6

func (r *RabbitMQ) ConsumeSimple() (msgs <-chan amqp.Delivery)

simple模式下消费者

func (*RabbitMQ) ConsumeTopic added in v1.0.6

func (r *RabbitMQ) ConsumeTopic() (msgs <-chan amqp.Delivery)

ConsumeTopic topic 模式下消费者,交换机类型:topic

func (*RabbitMQ) ConsumeWork added in v1.0.6

func (r *RabbitMQ) ConsumeWork() (msgs <-chan amqp.Delivery)

ConsumeWork work 模式下消费者

func (*RabbitMQ) Destroy added in v1.0.6

func (r *RabbitMQ) Destroy()

Destroy 断开channel 和 connection

func (*RabbitMQ) PublishPub added in v1.0.6

func (r *RabbitMQ) PublishPub(msg string)

PublishPub Pub模式队列生产 交换机类型:fanout

func (*RabbitMQ) PublishRouting added in v1.0.6

func (r *RabbitMQ) PublishRouting(msg string)

PublishRouting 路由模式发送消息 交换机类型:direct

func (*RabbitMQ) PublishSimple added in v1.0.6

func (r *RabbitMQ) PublishSimple(msg string)

simple模式队列生产

func (*RabbitMQ) PublishTopic added in v1.0.6

func (r *RabbitMQ) PublishTopic(msg string)

PublishTopic 话题模式发送消息

func (*RabbitMQ) PublishWork added in v1.0.6

func (r *RabbitMQ) PublishWork(msg string)

PublishWork work模式队列生产

type RedisClient added in v1.0.6

type RedisClient struct {
	Conn *redis.Client
}

func (*RedisClient) Destroy added in v1.0.6

func (rdsC *RedisClient) Destroy()

销毁redis连接

func (*RedisClient) NewRedisClient added in v1.0.6

func (rdsC *RedisClient) NewRedisClient(addr, pwd string, db int)

创建redis 客户端

type SqlClient

type SqlClient struct {
	Conf model.SQLConf
	Conn *zorm.DBDao
	Err  error
}

func (*SqlClient) NewSqlDB

func (s *SqlClient) NewSqlDB()

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL