代码拉取完成,页面将自动刷新
package apps
import (
"fmt"
"strings"
"github.com/emicklei/go-restful/v3"
"github.com/gin-gonic/gin"
"github.com/infraboard/mcube/http/restful/accessor/form"
"github.com/infraboard/mcube/http/restful/accessor/yaml"
"github.com/infraboard/mcube/http/restful/accessor/yamlk8s"
"google.golang.org/grpc"
)
var (
//HostService host.Service
//维护当前所有服务
implApps = map[string]ImplService{}
//维护所有服务对应的http handler
ginApps = map[string]Ginservice{}
//维护所有服务对应的grpc
grpcApps = map[string]GrpcService{}
restfulApps = map[string]RestfulService{}
)
// 将服务注册到svcs中
func ResitryImpl(svc ImplService) {
if _, ok := implApps[svc.Name()]; ok {
panic(fmt.Sprintf("service %s has registried", svc.Name()))
}
implApps[svc.Name()] = svc
//断言注册具体服务
//if v, ok := svc.(host.Service); ok {
// HostService = v
//}
}
func ResitryGin(svc Ginservice) {
_, ok := ginApps[svc.Name()]
if ok {
//panic被用来处理在正常操作期间不应该出现的错误,或者我们不准备处理的错误。
panic(fmt.Sprintf("gin http hander %s has regsitried", svc.Name()))
}
ginApps[svc.Name()] = svc
}
func RegistryRestful(svc RestfulService) {
_, ok := ginApps[svc.Name()]
if ok {
panic(fmt.Sprintf("restful http hander %s has registried", svc.Name()))
}
restfulApps[svc.Name()] = svc
}
// 将grpc实现类赋值给interface注册到ioc
func RegistryGrpc(svc GrpcService) {
if _, ok := grpcApps[svc.Name()]; ok {
panic(fmt.Sprintf("grpc hander %s has registried", svc.Name()))
}
grpcApps[svc.Name()] = svc
}
// 初始化注册到IOC中的所有服务
func InitImpl() {
for _, v := range implApps {
v.Config()
}
}
func InitGin(r gin.IRouter) {
for _, v := range ginApps {
v.Config()
}
for _, v := range ginApps {
v.Registry(r)
}
}
func InitGrpc(server *grpc.Server) {
for _, v := range grpcApps {
v.Config()
}
for _, v := range grpcApps {
v.Registry(server)
}
}
func InitRestful(pathPrefix string, root *restful.Container) {
for _, v := range restfulApps {
v.Config()
}
// for _, v := range restfulApps {
// //使用场景一般是需要显式返回指针
// ws := new(restful.WebService)
// r.Add(ws)
// v.Registry(ws)
// }
for _, api := range restfulApps {
pathPrefix = strings.TrimSuffix(pathPrefix, "/")
ws := new(restful.WebService)
ws.
Path(fmt.Sprintf("%s/%s/%s", pathPrefix, api.Version(), api.Name())).
Consumes(restful.MIME_JSON, restful.MIME_XML, form.MIME_POST_FORM, form.MIME_MULTIPART_FORM, yaml.MIME_YAML, yamlk8s.MIME_YAML).
Produces(restful.MIME_JSON, restful.MIME_XML, yaml.MIME_YAML, yamlk8s.MIME_YAML)
//将ws加载到路由处理器里面
root.Add(ws)
//将webservice加到路由里面
api.Registry(ws)
}
}
// 返回对象即要注册的接口给http
func GetImpl(name string) interface{} {
for k, v := range implApps {
if k == name {
return v
}
}
return nil
}
func GetGrpcImpl(name string) interface{} {
for k, v := range grpcApps {
if k == name {
return v
}
}
return nil
}
func GetGrpcApp(name string) {
_, ok := grpcApps[name]
if !ok {
panic(fmt.Sprintf("grpc app %s not registed", name))
}
}
// 定义注册服务要满足的接口
type ImplService interface {
Config()
Name() string
}
type Ginservice interface {
Registry(r gin.IRouter)
Name() string
Config()
}
type GrpcService interface {
Registry(server *grpc.Server)
Name() string
Config() error
}
type RestfulService interface {
Name() string
Config()
Registry(ws *restful.WebService)
Version() string
}
// 已经加载完成的gin app有哪些
func LoadGinApps() (names []string) {
for k := range ginApps {
names = append(names, k)
}
return
}
func LoadGrpcApps() (names []string) {
for k := range grpcApps {
names = append(names, k)
}
return
}
func LoadRestfulApps() (names []string) {
for k := range restfulApps {
names = append(names, k)
}
return
}
func LoadImplApps() (names []string) {
for k := range implApps {
names = append(names, k)
}
return
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。