mirror of
https://github.com/eolinker/apinto
synced 2025-12-24 13:28:15 +08:00
暂时提交
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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"`
|
||||
}
|
||||
@@ -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")
|
||||
}
|
||||
@@ -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,
|
||||
@@ -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)
|
||||
Reference in New Issue
Block a user