项目main
This commit is contained in:
169
main.go
Normal file
169
main.go
Normal file
@@ -0,0 +1,169 @@
|
||||
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)
|
||||
//}
|
||||
Reference in New Issue
Block a user