Skip to content
Snippets Groups Projects
Commit d19a14b0 authored by pantianying's avatar pantianying
Browse files

改成和java一样的使用方式

parent cdb32e1c
No related branches found
No related tags found
No related merge requests found
package config
import (
"context"
"errors"
)
const GenericReferKey = "GenericReferKey"
type GenericService struct {
Invoke func(req []interface{}) (interface{}, error) `dubbo:"$invoke"`
referenceStr string
}
func NewGenericService(referenceStr string) *GenericService {
return &GenericService{referenceStr: GenericReferKey}
return &GenericService{referenceStr: referenceStr}
}
func (u *GenericService) Reference() string {
return u.referenceStr
}
type GenericConsumerConfig struct {
ID string
Protocol string
Registry string
Version string
Group string
InterfaceName string
Cluster string
Retries int64
ref *ReferenceConfig
genericService *GenericService
}
func (gConfig *GenericConsumerConfig) Load() (err error) {
gr := NewReferenceConfig(context.TODO())
func (refconfig *ReferenceConfig) Load(id string) {
//gr.Filter = "genericConsumer" //todo: add genericConsumer filter
gr.Registry = gConfig.Registry
gr.Protocol = gConfig.Protocol
gr.Version = gConfig.Version
gr.Group = gConfig.Group
gr.InterfaceName = gConfig.InterfaceName
gr.Cluster = gConfig.Cluster
gr.Methods = append(gr.Methods, &MethodConfig{Name: "$invoke", Retries: gConfig.Retries})
gConfig.ref = gr
gConfig.genericService = NewGenericService(gConfig.ID)
SetConsumerService(gConfig.genericService)
rpcService := GetConsumerService(GenericReferKey)
if rpcService == nil {
err = errors.New("get rpcService err,GenericReferKey not Set ")
return
}
gConfig.ref.id = gConfig.ID
gConfig.ref.Refer()
gConfig.ref.Implement(rpcService)
genericService := NewGenericService(refconfig.id)
SetConsumerService(genericService)
refconfig.id = id
refconfig.Refer()
refconfig.Implement(genericService)
return
}
func (gConfig *GenericConsumerConfig) GetGenericService() *GenericService {
return gConfig.genericService
}
......@@ -290,18 +290,18 @@ func test2() {
println("error: %v", err)
}
func test3() {
var genericConfig = config.GenericConsumerConfig{
ID: "UserProviderGer", //GetService的唯一标识不可缺少
var appName = "UserProviderGer"
var referenceConfig = config.ReferenceConfig{
InterfaceName: "com.ikurento.user.UserProvider",
Cluster: "failover",
Registry: "hangzhouzk",
Protocol: dubbo.DUBBO,
}
genericConfig.Load()
referenceConfig.Load(appName) //appName是GetService的唯一标识不可缺少
time.Sleep(3 * time.Second)
println("\n\n\nstart to generic invoke")
resp, err := genericConfig.GetGenericService().Invoke([]interface{}{"GetUser", []string{"java.lang.String"}, []hessian.Object{"A003"}})
resp, err := referenceConfig.GetRPCService().(*config.GenericService).Invoke([]interface{}{"GetUser", []string{"java.lang.String"}, []hessian.Object{"A003"}})
if err != nil {
panic(err)
}
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment