170 lines
4.3 KiB
Go
170 lines
4.3 KiB
Go
package main
|
||
|
||
import (
|
||
"goLearn/connectPool"
|
||
"goLearn/model"
|
||
"sync"
|
||
"time"
|
||
)
|
||
|
||
var Ch = make(chan model.Task, 3)
|
||
|
||
var mutex sync.Mutex
|
||
var rwmutex sync.RWMutex
|
||
|
||
func main() {
|
||
//var wg sync.WaitGroup
|
||
//data := &model.Data{
|
||
// Count: 0,
|
||
// Record: make(map[int]int),
|
||
//}
|
||
//donetitle := make(chan struct{})
|
||
//for i := 0; i < 10; i++ {
|
||
// wg.Add(1)
|
||
// go goroutine.NewProducer(Ch, &wg, donetitle, i, &mutex, data, &rwmutex)
|
||
//}
|
||
//for i := 0; i < 3; i++ {
|
||
// wg.Add(1)
|
||
// go goroutine.NewConsumer(Ch, &wg, donetitle, i, data, &rwmutex)
|
||
//}
|
||
//time.Sleep(10 * time.Second)
|
||
//close(donetitle)
|
||
//wg.Wait()
|
||
//fmt.Println("任务完成")
|
||
|
||
//---------------------
|
||
|
||
donetitle := make(chan struct{})
|
||
|
||
connectPool.ConnectPool(donetitle)
|
||
|
||
time.Sleep(5 * time.Second)
|
||
close(donetitle)
|
||
defer connectPool.DisconnectPool()
|
||
|
||
//------------------
|
||
//ctx := context.WithValue(context.Background(), "value", model.Task{Id: "1", Content: "1"})
|
||
//goroutine.Runtask(ctx)
|
||
}
|
||
|
||
//
|
||
//
|
||
//package main
|
||
//
|
||
//import (
|
||
//"context"
|
||
//"encoding/json"
|
||
//"fmt"
|
||
//clientv3 "go.etcd.io/etcd/client/v3"
|
||
//"log"
|
||
//"os"
|
||
//"os/signal"
|
||
//"syscall"
|
||
//"time"
|
||
//)
|
||
//
|
||
//// 服务元信息结构体
|
||
//type ServiceInfo struct {
|
||
// Name string `json:"name"` // 服务名称
|
||
// Address string `json:"address"` // 服务地址(IP:端口)
|
||
// Version string `json:"version"` // 服务版本
|
||
// ID string `json:"id"` // 服务实例唯一ID
|
||
//}
|
||
//
|
||
//// 注册服务到etcd
|
||
//func registerService(client *clientv3.Client, info ServiceInfo, ttl int64) (chan struct{}, error) {
|
||
// // 1. 生成注册键名(格式:/services/服务名/实例ID)
|
||
// key := fmt.Sprintf("/services/%s/%s", info.Name, info.ID)
|
||
//
|
||
// // 2. 序列化服务信息为JSON
|
||
// value, err := json.Marshal(info)
|
||
// if err != nil {
|
||
// return nil, fmt.Errorf("序列化服务信息失败: %v", err)
|
||
// }
|
||
//
|
||
// // 3. 创建带TTL的租约
|
||
// leaseResp, err := client.Grant(context.Background(), ttl)
|
||
// if err != nil {
|
||
// return nil, fmt.Errorf("创建租约失败: %v", err)
|
||
// }
|
||
//
|
||
// // 4. 注册服务(绑定租约)
|
||
// _, err = client.Put(context.Background(), key, string(value), clientv3.WithLease(leaseResp.ID))
|
||
// if err != nil {
|
||
// return nil, fmt.Errorf("注册服务失败: %v", err)
|
||
// }
|
||
//
|
||
// // 5. 启动心跳续约(保持租约有效)
|
||
// keepAliveChan, err := client.KeepAlive(context.Background(), leaseResp.ID)
|
||
// if err != nil {
|
||
// return nil, fmt.Errorf("启动心跳失败: %v", err)
|
||
// }
|
||
//
|
||
// // 6. 监听心跳通道(处理异常)
|
||
// done := make(chan struct{})
|
||
// go func() {
|
||
// for {
|
||
// select {
|
||
// case _, ok := <-keepAliveChan:
|
||
// if !ok {
|
||
// log.Println("心跳已停止,服务可能已下线")
|
||
// close(done)
|
||
// return
|
||
// }
|
||
// // log.Println("心跳续约成功")
|
||
// case <-done:
|
||
// return
|
||
// }
|
||
// }
|
||
// }()
|
||
//
|
||
// return done, nil
|
||
//}
|
||
//
|
||
//// 从etcd注销服务
|
||
//func unregisterService(client *clientv3.Client, serviceName, serviceID string) error {
|
||
// key := fmt.Sprintf("/services/%s/%s", serviceName, serviceID)
|
||
// _, err := client.Delete(context.Background(), key)
|
||
// return err
|
||
//}
|
||
//
|
||
//func main() {
|
||
// // 1. 连接etcd
|
||
// client, err := clientv3.New(clientv3.Config{
|
||
// Endpoints: []string{"127.0.0.1:2379"},
|
||
// DialTimeout: 5 * time.Second,
|
||
// })
|
||
// if err != nil {
|
||
// log.Fatalf("连接etcd失败: %v", err)
|
||
// }
|
||
// defer client.Close()
|
||
//
|
||
// // 2. 定义服务信息(实际应用中应从配置或环境变量获取)
|
||
// serviceInfo := ServiceInfo{
|
||
// Name: "user-service", // 服务名称
|
||
// Address: "192.168.1.100:8080", // 服务地址
|
||
// Version: "v1.0.0", // 服务版本
|
||
// ID: "user-service-01", // 实例唯一ID(可使用UUID)
|
||
// }
|
||
//
|
||
// // 3. 注册服务(租约10秒,每几秒自动续约)
|
||
// done, err := registerService(client, serviceInfo, 10)
|
||
// if err != nil {
|
||
// log.Fatalf("服务注册失败: %v", err)
|
||
// }
|
||
// log.Printf("服务 %s 已注册到etcd", serviceInfo.ID)
|
||
//
|
||
// // 4. 监听退出信号,优雅注销服务
|
||
// sigChan := make(chan os.Signal, 1)
|
||
// signal.Notify(sigChan, syscall.SIGINT, syscall.SIGTERM)
|
||
// <-sigChan
|
||
//
|
||
// // 5. 注销服务
|
||
// if err := unregisterService(client, serviceInfo.Name, serviceInfo.ID); err != nil {
|
||
// log.Printf("服务注销失败: %v", err)
|
||
// } else {
|
||
// log.Printf("服务 %s 已从etcd注销", serviceInfo.ID)
|
||
// }
|
||
// close(done)
|
||
//}
|