init
This commit is contained in:
		
							parent
							
								
									b0200ad619
								
							
						
					
					
						commit
						300a01adde
					
				| 
						 | 
				
			
			@ -0,0 +1,35 @@
 | 
			
		|||
package cmd
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"context"
 | 
			
		||||
	"os"
 | 
			
		||||
	"os/signal"
 | 
			
		||||
	"syscall"
 | 
			
		||||
 | 
			
		||||
	"git.hpds.cc/pavement/hpds_node"
 | 
			
		||||
	discover "hpds_access_point/internal/discover/consul"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
var (
 | 
			
		||||
	consulConfigs chan *discover.ConsulConfig
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func Run() {
 | 
			
		||||
	ctx, cancel := context.WithCancel(context.Background())
 | 
			
		||||
	defer cancel()
 | 
			
		||||
 | 
			
		||||
	// 退出channel
 | 
			
		||||
	exitChannel := make(chan os.Signal)
 | 
			
		||||
	defer close(exitChannel)
 | 
			
		||||
 | 
			
		||||
	// 退出信号监听
 | 
			
		||||
	go func(c chan os.Signal) {
 | 
			
		||||
		signal.Notify(c, syscall.SIGINT, syscall.SIGTERM)
 | 
			
		||||
	}(exitChannel)
 | 
			
		||||
 | 
			
		||||
	ap := hpds_node.NewAccessPoint(
 | 
			
		||||
		"hpds-ap",
 | 
			
		||||
		hpds_node.WithMqAddr("localhost:27188"),
 | 
			
		||||
		hpds_node.WithCredential("token:z1"),
 | 
			
		||||
	)
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,7 @@
 | 
			
		|||
package config
 | 
			
		||||
 | 
			
		||||
type AccessPointConfig struct {
 | 
			
		||||
	NodeName string `yaml:"name"`
 | 
			
		||||
	Host     string `yaml:"host"`
 | 
			
		||||
	Port     string `yaml:"port"`
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,21 @@
 | 
			
		|||
module hpds_access_point
 | 
			
		||||
 | 
			
		||||
go 1.19
 | 
			
		||||
 | 
			
		||||
require github.com/hashicorp/consul/api v1.15.2
 | 
			
		||||
 | 
			
		||||
require (
 | 
			
		||||
	github.com/armon/go-metrics v0.3.10 // indirect
 | 
			
		||||
	github.com/fatih/color v1.9.0 // indirect
 | 
			
		||||
	github.com/hashicorp/go-cleanhttp v0.5.1 // indirect
 | 
			
		||||
	github.com/hashicorp/go-hclog v0.14.1 // indirect
 | 
			
		||||
	github.com/hashicorp/go-immutable-radix v1.3.0 // indirect
 | 
			
		||||
	github.com/hashicorp/go-rootcerts v1.0.2 // indirect
 | 
			
		||||
	github.com/hashicorp/golang-lru v0.5.4 // indirect
 | 
			
		||||
	github.com/hashicorp/serf v0.9.7 // indirect
 | 
			
		||||
	github.com/mattn/go-colorable v0.1.6 // indirect
 | 
			
		||||
	github.com/mattn/go-isatty v0.0.12 // indirect
 | 
			
		||||
	github.com/mitchellh/go-homedir v1.1.0 // indirect
 | 
			
		||||
	github.com/mitchellh/mapstructure v1.4.1 // indirect
 | 
			
		||||
	golang.org/x/sys v0.0.0-20220412211240-33da011f77ad // indirect
 | 
			
		||||
)
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,79 @@
 | 
			
		|||
package discover
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"fmt"
 | 
			
		||||
 | 
			
		||||
	"github.com/hashicorp/consul/api"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type ConsulConfig struct {
 | 
			
		||||
	Client                         *api.Client `json:"client"`                         // consul client
 | 
			
		||||
	ConsulAddress                  string      `json:"consulAddress"`                  // consul 服务地址:IP+port
 | 
			
		||||
	ServiceId                      string      `json:"serviceId"`                      // 服务ID
 | 
			
		||||
	ServiceName                    string      `json:"serviceName"`                    // 服务名称
 | 
			
		||||
	ServiceIP                      string      `json:"serviceIP"`                      // 服务IP
 | 
			
		||||
	ServicePort                    int         `json:"servicePort"`                    // 服务端口
 | 
			
		||||
	Tags                           []string    `json:"tags"`                           // 服务标签列表
 | 
			
		||||
	DeregisterCriticalServiceAfter int         `json:"deregisterCriticalServiceAfter"` // 指定与服务关联的检查应在此时间之后注销
 | 
			
		||||
	Interval                       int         `json:"interval"`                       // 指定运行此检查的频率
 | 
			
		||||
	Timeout                        int         `json:"timeout"`                        // 在脚本、HTTP、TCP 或 gRPC 检查的情况下指定传出连接的超时时间
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func NewConsulConfig(consulAddress string, serviceId string, serviceName string, serviceIP string, servicePort int, tags []string, deregisterCriticalServiceAfter int, interval int, timeout int) (*ConsulConfig, error) {
 | 
			
		||||
	// 1.consul配置
 | 
			
		||||
	config := api.DefaultConfig()
 | 
			
		||||
	config.Address = consulAddress
 | 
			
		||||
	// 2.client
 | 
			
		||||
	client, err := api.NewClient(config)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	return &ConsulConfig{
 | 
			
		||||
		Client:                         client,
 | 
			
		||||
		ConsulAddress:                  consulAddress,
 | 
			
		||||
		ServiceId:                      serviceId,
 | 
			
		||||
		ServiceName:                    serviceName,
 | 
			
		||||
		ServiceIP:                      serviceIP,
 | 
			
		||||
		ServicePort:                    servicePort,
 | 
			
		||||
		Tags:                           tags,
 | 
			
		||||
		DeregisterCriticalServiceAfter: deregisterCriticalServiceAfter,
 | 
			
		||||
		Interval:                       interval,
 | 
			
		||||
		Timeout:                        timeout,
 | 
			
		||||
	}, nil
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ServiceRegister 服务注册
 | 
			
		||||
func (cf *ConsulConfig) ServiceRegister() (err error) {
 | 
			
		||||
	// 注册器
 | 
			
		||||
	reg := &api.AgentServiceRegistration{
 | 
			
		||||
		ID:      cf.ServiceId,
 | 
			
		||||
		Name:    cf.ServiceName,
 | 
			
		||||
		Address: cf.ServiceIP,
 | 
			
		||||
		Port:    cf.ServicePort,
 | 
			
		||||
		Tags:    cf.Tags,
 | 
			
		||||
		Check: &api.AgentServiceCheck{
 | 
			
		||||
			Interval:                       fmt.Sprintf("%vs", cf.Interval),                                  // 健康检查间隔
 | 
			
		||||
			HTTP:                           fmt.Sprintf("http://%v:%v/health", cf.ServiceIP, cf.ServicePort), // HTTP 支持,执行健康检查的地址,service 会传到 Health.Check 函数中
 | 
			
		||||
			Timeout:                        fmt.Sprintf("%vs", cf.Timeout),                                   // 健康检查超时时间
 | 
			
		||||
			DeregisterCriticalServiceAfter: fmt.Sprintf("%vs", cf.DeregisterCriticalServiceAfter),            // 注销时间,相当于过期时间
 | 
			
		||||
			Notes:                          "Consul check service health status.",
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
	// 注册服务
 | 
			
		||||
	err = cf.Client.Agent().ServiceRegister(reg)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ServiceDeregister 服务注销
 | 
			
		||||
func (cf *ConsulConfig) ServiceDeregister() error {
 | 
			
		||||
	return cf.Client.Agent().ServiceDeregister(cf.ServiceId)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ServiceDiscover 服务发现
 | 
			
		||||
func (cf *ConsulConfig) ServiceDiscover(service string, tags []string, q *api.QueryOptions) ([]*api.CatalogService, *api.QueryMeta, error) {
 | 
			
		||||
	return cf.Client.Catalog().ServiceMultipleTags(service, tags, q)
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
		Reference in New Issue