暂时提交

This commit is contained in:
chenjiekun
2021-07-21 15:06:12 +08:00
parent e4cf0256b1
commit 8e57162543
5 changed files with 37 additions and 33 deletions

View File

@@ -1,5 +1,3 @@
// github.com/eolinker/goku-eosc/service.service.IService
package service
import (
@@ -8,6 +6,7 @@ import (
"time"
)
//CheckSkill 检查目标技能是否符合
func CheckSkill(skill string) bool {
return skill == "github.com/eolinker/goku-eosc/service.service.IService"
}
@@ -17,6 +16,7 @@ type IService interface {
Handle(w http.ResponseWriter, r *http.Request, router IRouterRule) error
}
//IRouterRule 实现了返回路由规则信息方法的接口如返回location、Host、Header、Query
type IRouterRule interface {
Location() string
Host() string
@@ -24,6 +24,7 @@ type IRouterRule interface {
Query() url.Values
}
//IServiceDetail 实现了返回服务信息方法的接口,如返回服务名,服务描述,重试次数间等..
type IServiceDetail interface {
Name() string
Desc() string

View File

@@ -1,9 +1,10 @@
package service_http
package servicehttp
import (
"github.com/eolinker/eosc"
)
//Config service_http驱动配置
type Config struct {
id string
Name string `json:"name"`
@@ -12,6 +13,6 @@ type Config struct {
Timeout int64 `json:"timeout"`
Retry int `json:"retry"`
Scheme string `json:"scheme"`
RewriteUrl string `json:"rewrite_url"`
RewriteURL string `json:"rewrite_url"`
Upstream eosc.RequireId `json:"upstream" skill:"github.com/eolinker/goku-eosc/upstream.upstream.IUpstream"`
}

View File

@@ -1,4 +1,4 @@
package service_http
package servicehttp
import (
"errors"
@@ -15,10 +15,6 @@ const (
driverName = "http"
)
var (
ErrorStructType = "error struct type: %s, need struct type: %s"
)
//driver 实现github.com/eolinker/eosc.eosc.IProfessionDriver接口
type driver struct {
profession string
@@ -30,14 +26,16 @@ type driver struct {
params map[string]string
}
//ConfigType 返回service_http驱动配置的反射类型
func (d *driver) ConfigType() reflect.Type {
return d.configType
}
//Create 创建service_http驱动的实例
func (d *driver) Create(id, name string, v interface{}, workers map[eosc.RequireId]interface{}) (eosc.IWorker, error) {
cfg, ok := v.(*Config)
if !ok {
return nil, errors.New(fmt.Sprintf("error struct type: %s, need struct type: %s", eosc.TypeNameOf(v), d.configType))
return nil, fmt.Errorf("need %s,now %s:%w", eosc.TypeNameOf((*Config)(nil)), eosc.TypeNameOf(v), eosc.ErrorStructType)
}
if work, has := workers[cfg.Upstream]; has {
w := &serviceWorker{
@@ -46,28 +44,28 @@ func (d *driver) Create(id, name string, v interface{}, workers map[eosc.Require
driver: cfg.Driver,
desc: cfg.Desc,
timeout: time.Duration(cfg.Timeout) * time.Millisecond,
rewriteUrl: cfg.RewriteUrl,
rewriteUrl: cfg.RewriteURL,
retry: cfg.Retry,
scheme: cfg.Scheme,
upstream: work.(upstream.IUpstream),
}
return w, nil
} else {
work, has = workers[eosc.RequireId(fmt.Sprintf("%s@%s", cfg.Upstream, "upstream"))]
if has {
w := &serviceWorker{
id: id,
name: name,
driver: cfg.Driver,
desc: cfg.Desc,
timeout: time.Duration(cfg.Timeout) * time.Millisecond,
rewriteUrl: cfg.RewriteUrl,
retry: cfg.Retry,
scheme: cfg.Scheme,
upstream: work.(upstream.IUpstream),
}
return w, nil
}
}
if work, has := workers[eosc.RequireId(fmt.Sprintf("%s@%s", cfg.Upstream, "upstream"))]; has {
w := &serviceWorker{
id: id,
name: name,
driver: cfg.Driver,
desc: cfg.Desc,
timeout: time.Duration(cfg.Timeout) * time.Millisecond,
rewriteUrl: cfg.RewriteURL,
retry: cfg.Retry,
scheme: cfg.Scheme,
upstream: work.(upstream.IUpstream),
}
return w, nil
}
return nil, errors.New("fail to create serviceWorker")
}

View File

@@ -1,4 +1,4 @@
package service_http
package servicehttp
import (
"reflect"
@@ -6,6 +6,7 @@ import (
"github.com/eolinker/eosc"
)
//Register 注册service_http驱动工厂
func Register() {
eosc.DefaultProfessionDriverRegister.RegisterProfessionDriver("eolinker:goku:service_http", NewFactory())
}
@@ -18,10 +19,12 @@ type factory struct {
params map[string]string
}
func NewFactory() *factory {
//NewFactory 创建service_http驱动工厂
func NewFactory() eosc.IProfessionDriverFactory {
return &factory{}
}
//ExtendInfo 返回service_http驱动工厂信息
func (f *factory) ExtendInfo() eosc.ExtendInfo {
return eosc.ExtendInfo{
ID: "eolinker:goku:service_http",
@@ -31,6 +34,7 @@ func (f *factory) ExtendInfo() eosc.ExtendInfo {
}
}
//Create 创建service_http驱动
func (f *factory) Create(profession string, name string, label string, desc string, params map[string]string) (eosc.IProfessionDriver, error) {
return &driver{
profession: profession,

View File

@@ -1,4 +1,4 @@
package service_http
package servicehttp
import (
"errors"
@@ -39,12 +39,12 @@ func (s *serviceWorker) Start() error {
func (s *serviceWorker) Reset(conf interface{}, workers map[eosc.RequireId]interface{}) error {
data, ok := conf.(*Config)
if !ok {
return errors.New(fmt.Sprintf(ErrorStructType, eosc.TypeNameOf(conf), eosc.TypeNameOf((*Config)(nil))))
return fmt.Errorf("need %s,now %s:%w", eosc.TypeNameOf((*Config)(nil)), eosc.TypeNameOf(conf), eosc.ErrorStructType)
}
if worker, has := workers[data.Upstream]; has {
s.desc = data.Desc
s.timeout = time.Duration(data.Timeout) * time.Millisecond
s.rewriteUrl = data.RewriteUrl
s.rewriteUrl = data.RewriteURL
s.retry = data.Retry
s.scheme = data.Scheme
u, ok := worker.(upstream.IUpstream)
@@ -57,7 +57,7 @@ func (s *serviceWorker) Reset(conf interface{}, workers map[eosc.RequireId]inter
if has {
s.desc = data.Desc
s.timeout = time.Duration(data.Timeout) * time.Millisecond
s.rewriteUrl = data.RewriteUrl
s.rewriteUrl = data.RewriteURL
s.retry = data.Retry
s.scheme = data.Scheme
u, ok := worker.(upstream.IUpstream)