Go redis mqtt

package main

import (
	"context"
	"fmt"

	mqtt "github.com/eclipse/paho.mqtt.golang"
	"github.com/go-redis/redis/v8"
)

var ctx = context.Background()

type RedisClient interface {
	rclient() *redis.Client
	set(c *redis.Client, key string, value string) error
	get(c *redis.Client, key string) (string, error)
	//delete(c *redis.Client, key string) error
}

type redisclient struct {
	Addr     string
	Password string
	DB       int
}

func (c *redisclient) rclient() *redis.Client {
	rdb := redis.NewClient(&redis.Options{
		Addr:     c.Addr,
		Password: c.Password,
		DB:       c.DB, // use default DB
	})
	return rdb
}

func (c *redisclient) set(rdb *redis.Client, key string, value string) error {
	err := rdb.Set(ctx, key, value, 0).Err()
	if err != nil {
		return err
	}
	return nil

}
func (c *redisclient) get(rdb *redis.Client, key string) (string, error) {
	value, err := rdb.Get(ctx, key).Result()
	if err != nil {
		return value, err
	}
	return value, nil
}

type MqClient interface {
	cclient() mqtt.Client
	sendMsg(clt mqtt.Client, topic string, message string) error
}

type mqttclient struct {
	Addr string
}

func (c *mqttclient) cclient() mqtt.Client {
	opts := mqtt.NewClientOptions().AddBroker(c.Addr).SetClientID("sample")
	clt := mqtt.NewClient(opts)
	return clt
}
func (c *mqttclient) sendMsg(clt mqtt.Client, topic string, message string) error {
	if token := clt.Connect(); token.Wait() && token.Error() != nil {
		//panic(token.Error())
		return token.Error()
	}
	if token := clt.Publish(topic, 0, false, message); token.Wait() && token.Error() != nil {
		//panic(token.Error())
		return token.Error()
	}
	return nil

}
func NewRedisClt() RedisClient {
	return &redisclient{Addr: "localhost:6379", Password: "", DB: 0}
}
func NewMqClient() MqClient {

	return &mqttclient{Addr: "tcp://localhost:1883"}

}
func Run(q RedisClient, key string, value string) {
	clt := q.rclient()
	q.set(clt, key, value)
}
func get(q RedisClient, key string) {
	clt := q.rclient()
	value, err := q.get(clt, key)
	if err != nil {

		panic(err)

	}
	fmt.Println(value)
}
func main() {

	var myclt = NewRedisClt()
	clt := myclt.rclient()
	value, err := myclt.get(clt, "name")
	if err != nil {

		panic(err)

	}
	mqclt := NewMqClient()
	mqcltins := mqclt.cclient()
	mqerr := mqclt.sendMsg(mqcltins, "TEST", value)
	if mqerr != nil {
		panic(mqerr)
	}

}

猜你喜欢

转载自blog.csdn.net/niekunhit/article/details/108778825