diff --git a/common/proxy/proxy_factory.go b/common/proxy/proxy_factory.go index cd6ef3d1db126db02e304cbf7c579bf6cde3014f..116cfe06693b6923ca10e0df6964317dabd91d0e 100644 --- a/common/proxy/proxy_factory.go +++ b/common/proxy/proxy_factory.go @@ -23,7 +23,8 @@ import ( ) type ProxyFactory interface { - GetProxy(invoker protocol.Invoker, callBack interface{}, url *common.URL) *Proxy + GetProxy(invoker protocol.Invoker, url *common.URL) *Proxy + GetAsyncProxy(invoker protocol.Invoker, callBack interface{}, url *common.URL) *Proxy GetInvoker(url common.URL) protocol.Invoker } diff --git a/common/proxy/proxy_factory/default.go b/common/proxy/proxy_factory/default.go index bf87e6380dccbee810dda135f79b02b64172ee5d..06824fdc1e27cde5e1905be3277451dd4395049c 100644 --- a/common/proxy/proxy_factory/default.go +++ b/common/proxy/proxy_factory/default.go @@ -54,12 +54,17 @@ type DefaultProxyFactory struct { func NewDefaultProxyFactory(options ...proxy.Option) proxy.ProxyFactory { return &DefaultProxyFactory{} } -func (factory *DefaultProxyFactory) GetProxy(invoker protocol.Invoker, callBack interface{}, url *common.URL) *proxy.Proxy { +func (factory *DefaultProxyFactory) GetProxy(invoker protocol.Invoker, url *common.URL) *proxy.Proxy { + return factory.GetAsyncProxy(invoker, nil, url) +} + +func (factory *DefaultProxyFactory) GetAsyncProxy(invoker protocol.Invoker, callBack interface{}, url *common.URL) *proxy.Proxy { //create proxy attachments := map[string]string{} attachments[constant.ASYNC_KEY] = url.GetParam(constant.ASYNC_KEY, "false") return proxy.NewProxy(invoker, callBack, attachments) } + func (factory *DefaultProxyFactory) GetInvoker(url common.URL) protocol.Invoker { return &ProxyInvoker{ BaseInvoker: *protocol.NewBaseInvoker(url), diff --git a/common/proxy/proxy_factory/default_test.go b/common/proxy/proxy_factory/default_test.go index cba7757e4bb51447be28f1d531f2a6fa1aa33a9e..7159b4b00eb2fcddb0f20f701f56b3179e57c4a0 100644 --- a/common/proxy/proxy_factory/default_test.go +++ b/common/proxy/proxy_factory/default_test.go @@ -18,6 +18,7 @@ package proxy_factory import ( + "fmt" "testing" ) @@ -33,7 +34,22 @@ import ( func Test_GetProxy(t *testing.T) { proxyFactory := NewDefaultProxyFactory() url := common.NewURLWithOptions() - proxy := proxyFactory.GetProxy(protocol.NewBaseInvoker(*url), nil, url) + proxy := proxyFactory.GetProxy(protocol.NewBaseInvoker(*url), url) + assert.NotNil(t, proxy) +} + +type TestAsync struct { +} + +func (u *TestAsync) CallBack(res common.CallbackResponse) { + fmt.Println("CallBack res:", res) +} + +func Test_GetAsyncProxy(t *testing.T) { + proxyFactory := NewDefaultProxyFactory() + url := common.NewURLWithOptions() + async := &TestAsync{} + proxy := proxyFactory.GetAsyncProxy(protocol.NewBaseInvoker(*url), async.CallBack, url) assert.NotNil(t, proxy) } diff --git a/config/reference_config.go b/config/reference_config.go index 1e469d037ceb91d8270fa2c8f60cc3431a04fba6..eec2c0fcd7e56c71a9b08e5955d73240e2574bf9 100644 --- a/config/reference_config.go +++ b/config/reference_config.go @@ -140,10 +140,13 @@ func (refconfig *ReferenceConfig) Refer() { } } - callback := GetCallback(refconfig.id) - //create proxy - refconfig.pxy = extension.GetProxyFactory(consumerConfig.ProxyFactory).GetProxy(refconfig.invoker, callback, url) + if refconfig.Async { + refconfig.pxy = extension.GetProxyFactory(consumerConfig.ProxyFactory).GetProxy(refconfig.invoker, url) + } else { + callback := GetCallback(refconfig.id) + refconfig.pxy = extension.GetProxyFactory(consumerConfig.ProxyFactory).GetAsyncProxy(refconfig.invoker, callback, url) + } } // @v is service provider implemented RPCService