Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
thythm
ribbon
提交
5b791450
R
ribbon
项目概览
thythm
/
ribbon
与 Fork 源项目一致
从无法访问的项目Fork
通知
3
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
ribbon
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
5b791450
编写于
6月 30, 2014
作者:
T
Tomasz Bak
浏览文件
操作
浏览文件
下载
差异文件
Merge remote-tracking branch 'netflix/2.x-commonclient' into 2.x-commonclient
上级
fc04feb1
8811cfb1
变更
9
隐藏空白更改
内联
并排
Showing
9 changed file
with
72 addition
and
48 deletion
+72
-48
ribbon-client-extensions/src/main/java/com/netflix/ribbonclientextensions/RequestTemplate.java
...a/com/netflix/ribbonclientextensions/RequestTemplate.java
+10
-10
ribbon-client-extensions/src/main/java/com/netflix/ribbonclientextensions/http/HttpRequest.java
.../com/netflix/ribbonclientextensions/http/HttpRequest.java
+1
-9
ribbon-client-extensions/src/main/java/com/netflix/ribbonclientextensions/http/HttpRequestBuilder.java
...tflix/ribbonclientextensions/http/HttpRequestBuilder.java
+4
-6
ribbon-client-extensions/src/main/java/com/netflix/ribbonclientextensions/http/HttpRequestTemplate.java
...flix/ribbonclientextensions/http/HttpRequestTemplate.java
+9
-9
ribbon-client-extensions/src/main/java/com/netflix/ribbonclientextensions/http/HttpResourceGroup.java
...etflix/ribbonclientextensions/http/HttpResourceGroup.java
+4
-1
ribbon-client-extensions/src/test/java/com/netflix/ribbonclientextensions/RibbonTest.java
...t/java/com/netflix/ribbonclientextensions/RibbonTest.java
+15
-8
ribbon-client-extensions/src/test/java/com/netflix/ribbonclientextensions/http/TemplateBuilderTest.java
...flix/ribbonclientextensions/http/TemplateBuilderTest.java
+26
-3
ribbon-core/src/main/java/com/netflix/client/config/DefaultClientConfigImpl.java
...va/com/netflix/client/config/DefaultClientConfigImpl.java
+1
-1
ribbon-core/src/test/java/com/netflix/client/config/DefaultClientConfigImplTest.java
...om/netflix/client/config/DefaultClientConfigImplTest.java
+2
-1
未找到文件。
ribbon-client-extensions/src/main/java/com/netflix/ribbonclientextensions/RequestTemplate.java
浏览文件 @
5b791450
...
...
@@ -9,17 +9,17 @@ import com.netflix.ribbonclientextensions.hystrix.FallbackHandler;
* @param <T> response entity type
* @param <R> response meta data, e.g. HttpClientResponse
*/
public
interface
RequestTemplate
<
T
,
R
>
{
public
abstract
class
RequestTemplate
<
T
,
R
>
{
RequestBuilder
<
T
>
requestBuilder
();
public
abstract
RequestBuilder
<
T
>
requestBuilder
();
String
name
();
public
abstract
String
name
();
RequestTemplate
<
T
,
R
>
copy
(
String
name
);
public
abstract
RequestTemplate
<
T
,
R
>
copy
(
String
name
);
RequestTemplate
<
T
,
R
>
withFallbackProvider
(
FallbackHandler
<
T
>
fallbackProvider
);
public
abstract
RequestTemplate
<
T
,
R
>
withFallbackProvider
(
FallbackHandler
<
T
>
fallbackProvider
);
RequestTemplate
<
T
,
R
>
withResponseValidator
(
ResponseValidator
<
R
>
transformer
);
public
abstract
RequestTemplate
<
T
,
R
>
withResponseValidator
(
ResponseValidator
<
R
>
transformer
);
/**
* Calling this method will enable both Hystrix request cache and supplied external cache providers
...
...
@@ -29,13 +29,13 @@ public interface RequestTemplate<T, R> {
* @param cacheKeyTemplate
* @return
*/
RequestTemplate
<
T
,
R
>
withRequestCacheKey
(
String
cacheKeyTemplate
);
public
abstract
RequestTemplate
<
T
,
R
>
withRequestCacheKey
(
String
cacheKeyTemplate
);
RequestTemplate
<
T
,
R
>
addCacheProvider
(
String
cacheKeyTemplate
,
CacheProvider
<
T
>
cacheProvider
);
public
abstract
RequestTemplate
<
T
,
R
>
addCacheProvider
(
String
cacheKeyTemplate
,
CacheProvider
<
T
>
cacheProvider
);
RequestTemplate
<
T
,
R
>
withHystrixProperties
(
HystrixObservableCommand
.
Setter
setter
);
public
abstract
RequestTemplate
<
T
,
R
>
withHystrixProperties
(
HystrixObservableCommand
.
Setter
setter
);
public
abstract
class
RequestBuilder
<
T
>
{
public
static
abstract
class
RequestBuilder
<
T
>
{
public
abstract
RequestBuilder
<
T
>
withRequestProperty
(
String
key
,
Object
value
);
public
abstract
RibbonRequest
<
T
>
build
();
...
...
ribbon-client-extensions/src/main/java/com/netflix/ribbonclientextensions/http/HttpRequest.java
浏览文件 @
5b791450
...
...
@@ -3,7 +3,6 @@ package com.netflix.ribbonclientextensions.http;
import
io.netty.buffer.ByteBuf
;
import
io.reactivex.netty.protocol.http.client.HttpClient
;
import
io.reactivex.netty.protocol.http.client.HttpClientRequest
;
import
io.reactivex.netty.protocol.http.client.HttpClientResponse
;
import
java.util.HashMap
;
import
java.util.LinkedList
;
...
...
@@ -12,18 +11,11 @@ import java.util.Map;
import
java.util.concurrent.Future
;
import
rx.Observable
;
import
rx.Observable.OnSubscribe
;
import
rx.Subscriber
;
import
com.netflix.hystrix.HystrixExecutableInfo
;
import
com.netflix.hystrix.HystrixObservableCommand
;
import
com.netflix.ribbonclientextensions.CacheProvider
;
import
com.netflix.ribbonclientextensions.ResponseValidator
;
import
com.netflix.ribbonclientextensions.RibbonRequest
;
import
com.netflix.ribbonclientextensions.RequestWithMetaData
;
import
com.netflix.ribbonclientextensions.RibbonRe
sponse
;
import
com.netflix.ribbonclientextensions.RibbonRe
quest
;
import
com.netflix.ribbonclientextensions.http.HttpRequestTemplate.CacheProviderWithKeyTemplate
;
import
com.netflix.ribbonclientextensions.hystrix.FallbackHandler
;
import
com.netflix.ribbonclientextensions.template.TemplateParser
;
import
com.netflix.ribbonclientextensions.template.TemplateParsingException
;
...
...
ribbon-client-extensions/src/main/java/com/netflix/ribbonclientextensions/http/HttpRequestBuilder.java
浏览文件 @
5b791450
package
com.netflix.ribbonclientextensions.http
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.concurrent.ConcurrentHashMap
;
import
io.netty.buffer.ByteBuf
;
import
io.reactivex.netty.protocol.http.client.HttpClient
;
import
io.reactivex.netty.protocol.http.client.HttpClientRequest
;
import
io.reactivex.netty.protocol.http.client.RawContentSource
;
import
io.reactivex.netty.protocol.http.client.RepeatableContentHttpRequest
;
import
com.netflix.hystrix.HystrixObservableCommand
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.concurrent.ConcurrentHashMap
;
import
com.netflix.hystrix.exception.HystrixBadRequestException
;
import
com.netflix.ribbonclientextensions.RequestTemplate.RequestBuilder
;
import
com.netflix.ribbonclientextensions.RibbonRequest
;
...
...
ribbon-client-extensions/src/main/java/com/netflix/ribbonclientextensions/http/HttpRequestTemplate.java
浏览文件 @
5b791450
...
...
@@ -24,7 +24,7 @@ import com.netflix.ribbonclientextensions.ResponseValidator;
import
com.netflix.ribbonclientextensions.hystrix.FallbackHandler
;
import
com.netflix.ribbonclientextensions.template.ParsedTemplate
;
public
class
HttpRequestTemplate
<
T
>
implement
s
RequestTemplate
<
T
,
HttpClientResponse
<
ByteBuf
>>
{
public
class
HttpRequestTemplate
<
T
>
extend
s
RequestTemplate
<
T
,
HttpClientResponse
<
ByteBuf
>>
{
private
final
HttpClient
<
ByteBuf
,
ByteBuf
>
client
;
private
final
String
clientName
;
...
...
@@ -60,8 +60,8 @@ public class HttpRequestTemplate<T> implements RequestTemplate<T, HttpClientResp
}
}
public
HttpRequestTemplate
(
String
name
,
HttpResourceGroup
group
,
HttpClient
<
ByteBuf
,
ByteBuf
>
client
,
Class
<?
extends
T
>
classType
)
{
this
.
client
=
client
;
public
HttpRequestTemplate
(
String
name
,
HttpResourceGroup
group
,
Class
<?
extends
T
>
classType
)
{
this
.
client
=
group
.
getClient
()
;
this
.
classType
=
classType
;
if
(
client
instanceof
LoadBalancingRxClient
)
{
LoadBalancingRxClient
<?,
?
,?>
ribbonClient
=
(
LoadBalancingRxClient
<?,
?
,?>)
client
;
...
...
@@ -93,14 +93,14 @@ public class HttpRequestTemplate<T> implements RequestTemplate<T, HttpClientResp
if
(
setter
==
null
)
{
setter
=
HystrixObservableCommand
.
Setter
.
withGroupKey
(
HystrixCommandGroupKey
.
Factory
.
asKey
(
clientName
))
.
andCommandKey
(
HystrixCommandKey
.
Factory
.
asKey
(
name
()));
HystrixCommandProperties
.
Setter
commandProps
=
HystrixCommandProperties
.
Setter
();
if
(
maxResponseTime
>
0
)
{
setter
.
andCommandPropertiesDefaults
(
HystrixCommandProperties
.
Setter
().
withExecutionIsolationThreadTimeoutInMilliseconds
(
maxResponseTime
));
commandProps
.
withExecutionIsolationThreadTimeoutInMilliseconds
(
maxResponseTime
);
}
if
(
concurrentRequestLimit
>
0
)
{
setter
.
andCommandPropertiesDefaults
(
HystrixCommandProperties
.
Setter
().
withExecutionIsolationSemaphoreMaxConcurrentRequests
(
concurrentRequestLimit
));
commandProps
.
withExecutionIsolationSemaphoreMaxConcurrentRequests
(
concurrentRequestLimit
);
}
setter
.
andCommandPropertiesDefaults
(
commandProps
);
}
return
new
HttpRequestBuilder
<
T
>(
this
);
}
...
...
@@ -190,7 +190,7 @@ public class HttpRequestTemplate<T> implements RequestTemplate<T, HttpClientResp
@Override
public
HttpRequestTemplate
<
T
>
copy
(
String
name
)
{
HttpRequestTemplate
<
T
>
newTemplate
=
new
HttpRequestTemplate
<
T
>(
name
,
this
.
group
,
this
.
cl
ient
,
this
.
cl
assType
);
HttpRequestTemplate
<
T
>
newTemplate
=
new
HttpRequestTemplate
<
T
>(
name
,
this
.
group
,
this
.
classType
);
newTemplate
.
cacheProviders
.
addAll
(
this
.
cacheProviders
);
newTemplate
.
method
=
this
.
method
;
newTemplate
.
headers
.
add
(
this
.
headers
);
...
...
@@ -217,5 +217,5 @@ public class HttpRequestTemplate<T> implements RequestTemplate<T, HttpClientResp
HttpClient
<
ByteBuf
,
ByteBuf
>
getClient
()
{
return
this
.
client
;
}
}
ribbon-client-extensions/src/main/java/com/netflix/ribbonclientextensions/http/HttpResourceGroup.java
浏览文件 @
5b791450
...
...
@@ -37,7 +37,7 @@ public class HttpResourceGroup extends ResourceGroup<HttpRequestTemplate<?>> {
@Override
public
<
T
>
HttpRequestTemplate
<
T
>
newRequestTemplate
(
String
name
,
Class
<?
extends
T
>
classType
)
{
return
new
HttpRequestTemplate
<
T
>(
name
,
HttpResourceGroup
.
this
,
client
,
classType
);
return
new
HttpRequestTemplate
<
T
>(
name
,
this
,
classType
);
}
public
HttpRequestTemplate
<
ByteBuf
>
newRequestTemplate
(
String
name
)
{
...
...
@@ -48,4 +48,7 @@ public class HttpResourceGroup extends ResourceGroup<HttpRequestTemplate<?>> {
return
headers
;
}
HttpClient
<
ByteBuf
,
ByteBuf
>
getClient
()
{
return
client
;
}
}
ribbon-client-extensions/src/test/java/com/netflix/ribbonclientextensions/RibbonTest.java
浏览文件 @
5b791450
...
...
@@ -11,6 +11,8 @@ import java.io.UnsupportedEncodingException;
import
java.nio.charset.Charset
;
import
java.util.Map
;
import
java.util.concurrent.CountDownLatch
;
import
java.util.concurrent.ExecutionException
;
import
java.util.concurrent.Future
;
import
java.util.concurrent.atomic.AtomicBoolean
;
import
java.util.concurrent.atomic.AtomicReference
;
...
...
@@ -61,12 +63,15 @@ public class RibbonTest {
@Test
public
void
testCommandWithMetaData
()
throws
IOException
{
public
void
testCommandWithMetaData
()
throws
IOException
,
InterruptedException
,
ExecutionException
{
// LogManager.getRootLogger().setLevel((Level)Level.DEBUG);
MockWebServer
server
=
new
MockWebServer
();
String
content
=
"Hello world"
;
server
.
enqueue
(
new
MockResponse
().
setResponseCode
(
200
).
setHeader
(
"Content-type"
,
"text/plain"
)
.
setBody
(
content
));
server
.
enqueue
(
new
MockResponse
().
setResponseCode
(
200
).
setHeader
(
"Content-type"
,
"text/plain"
)
.
setBody
(
content
));
server
.
play
();
HttpResourceGroup
group
=
Ribbon
.
createHttpResourceGroup
(
"myclient"
,
ClientOptions
.
create
()
...
...
@@ -80,12 +85,11 @@ public class RibbonTest {
public
Observable
<
ByteBuf
>
get
(
String
key
,
Map
<
String
,
Object
>
vars
)
{
return
Observable
.
error
(
new
Exception
(
"Cache miss"
));
}
}).
withHystrixProperties
(
HystrixObservableCommand
.
Setter
.
withGroupKey
(
HystrixCommandGroupKey
.
Factory
.
asKey
(
"group"
))
.
andCommandPropertiesDefaults
(
HystrixCommandProperties
.
Setter
().
withRequestCacheEnabled
(
false
))
)
})
.
requestBuilder
().
build
();
final
AtomicBoolean
success
=
new
AtomicBoolean
(
false
);
Observable
<
String
>
result
=
request
.
withMetadata
().
toObservable
().
flatMap
(
new
Func1
<
RibbonResponse
<
Observable
<
ByteBuf
>>,
Observable
<
String
>>(){
RequestWithMetaData
<
ByteBuf
>
metaRequest
=
request
.
withMetadata
();
Observable
<
String
>
result
=
metaRequest
.
toObservable
().
flatMap
(
new
Func1
<
RibbonResponse
<
Observable
<
ByteBuf
>>,
Observable
<
String
>>(){
@Override
public
Observable
<
String
>
call
(
final
RibbonResponse
<
Observable
<
ByteBuf
>>
response
)
{
...
...
@@ -101,6 +105,12 @@ public class RibbonTest {
String
s
=
result
.
toBlocking
().
single
();
assertEquals
(
content
,
s
);
assertTrue
(
success
.
get
());
Future
<
RibbonResponse
<
ByteBuf
>>
future
=
metaRequest
.
queue
();
RibbonResponse
<
ByteBuf
>
response
=
future
.
get
();
assertEquals
(
content
,
response
.
content
().
toString
(
Charset
.
defaultCharset
()));
assertTrue
(
future
.
isDone
());
assertTrue
(
response
.
getHystrixInfo
().
isSuccessfulExecution
());
}
...
...
@@ -222,9 +232,6 @@ public class RibbonTest {
}
})
.
withUriTemplate
(
"/"
)
.
withHystrixProperties
(
HystrixObservableCommand
.
Setter
.
withGroupKey
(
HystrixCommandGroupKey
.
Factory
.
asKey
(
"group"
))
.
andCommandPropertiesDefaults
(
HystrixCommandProperties
.
Setter
().
withRequestCacheEnabled
(
false
))
)
.
requestBuilder
().
build
();
String
result
=
request
.
execute
().
toString
(
Charset
.
defaultCharset
());
assertEquals
(
content
,
result
);
...
...
ribbon-client-extensions/src/test/java/com/netflix/ribbonclientextensions/http/TemplateBuilderTest.java
浏览文件 @
5b791450
...
...
@@ -12,7 +12,11 @@ import org.junit.Test;
import
rx.Observable
;
import
com.netflix.hystrix.HystrixCommandProperties
;
import
com.netflix.hystrix.HystrixObservableCommand
;
import
com.netflix.hystrix.HystrixObservableCommand.Setter
;
import
com.netflix.ribbonclientextensions.CacheProvider
;
import
com.netflix.ribbonclientextensions.ClientOptions
;
import
com.netflix.ribbonclientextensions.Ribbon
;
import
com.netflix.ribbonclientextensions.RibbonRequest
;
...
...
@@ -41,7 +45,7 @@ public class TemplateBuilderTest {
public
void
testVarReplacement
()
{
HttpResourceGroup
group
=
Ribbon
.
createHttpResourceGroup
(
"test"
);
HttpRequestTemplate
<
ByteBuf
>
template
=
group
.
newRequestTemplate
(
"
resource1
"
,
ByteBuf
.
class
);
HttpRequestTemplate
<
ByteBuf
>
template
=
group
.
newRequestTemplate
(
"
testVarReplacement
"
,
ByteBuf
.
class
);
template
.
withUriTemplate
(
"/foo/{id}?name={name}"
);
HttpClientRequest
<
ByteBuf
>
request
=
template
.
requestBuilder
()
...
...
@@ -55,7 +59,7 @@ public class TemplateBuilderTest {
public
void
testCacheKeyTemplates
()
{
HttpResourceGroup
group
=
Ribbon
.
createHttpResourceGroup
(
"test"
);
HttpRequestTemplate
<
String
>
template
=
group
.
newRequestTemplate
(
"
resource1
"
,
String
.
class
);
HttpRequestTemplate
<
String
>
template
=
group
.
newRequestTemplate
(
"
testCacheKeyTemplates
"
,
String
.
class
);
template
.
withUriTemplate
(
"/foo/{id}"
)
.
addCacheProvider
(
"cache.{id}"
,
new
FakeCacheProvider
(
"cache.3"
))
.
addCacheProvider
(
"/cache/{id}"
,
new
FakeCacheProvider
(
"/cache/5"
));
...
...
@@ -73,7 +77,7 @@ public class TemplateBuilderTest {
HttpResourceGroup
group
=
Ribbon
.
createHttpResourceGroup
(
"test"
);
group
.
withCommonHeader
(
"header1"
,
"group"
);
HttpRequestTemplate
<
String
>
template
=
group
.
newRequestTemplate
(
"
resource1
"
,
String
.
class
);
HttpRequestTemplate
<
String
>
template
=
group
.
newRequestTemplate
(
"
testHttpHeaders
"
,
String
.
class
);
template
.
withUriTemplate
(
"/foo/bar"
)
.
withHeader
(
"header2"
,
"template"
)
.
withHeader
(
"header1"
,
"template"
);
...
...
@@ -88,5 +92,24 @@ public class TemplateBuilderTest {
assertEquals
(
1
,
header2
.
size
());
assertEquals
(
"template"
,
header2
.
get
(
0
));
}
@Test
public
void
testHystrixProperties
()
{
ClientOptions
clientOptions
=
ClientOptions
.
create
()
.
withMaxAutoRetriesNextServer
(
1
)
.
withMaxAutoRetries
(
1
)
.
withConnectTimeout
(
1000
)
.
withMaxTotalConnections
(
400
)
.
withReadTimeout
(
2000
);
HttpResourceGroup
group
=
Ribbon
.
createHttpResourceGroup
(
"test"
,
clientOptions
);
HttpRequestTemplate
<
String
>
template
=
group
.
newRequestTemplate
(
"testHystrixProperties"
,
String
.
class
);
HttpRequest
<
String
>
request
=
(
HttpRequest
<
String
>)
template
.
withMethod
(
"GET"
)
.
withUriTemplate
(
"/foo/bar"
)
.
requestBuilder
().
build
();
HystrixObservableCommand
<
String
>
command
=
request
.
createHystrixCommand
();
HystrixCommandProperties
props
=
command
.
getProperties
();
assertEquals
(
400
,
props
.
executionIsolationSemaphoreMaxConcurrentRequests
().
get
().
intValue
());
assertEquals
(
12000
,
props
.
executionIsolationThreadTimeoutInMilliseconds
().
get
().
intValue
());
}
}
ribbon-core/src/main/java/com/netflix/client/config/DefaultClientConfigImpl.java
浏览文件 @
5b791450
...
...
@@ -858,7 +858,7 @@ public class DefaultClientConfigImpl implements IClientConfig {
@SuppressWarnings
(
"unchecked"
)
@Override
public
<
T
>
T
getPropertyWithType
(
IClientConfigKey
<
T
>
key
)
{
Object
obj
=
properties
.
get
(
key
.
key
());
Object
obj
=
getProperty
(
key
.
key
());
if
(
obj
==
null
)
{
return
null
;
}
...
...
ribbon-core/src/test/java/com/netflix/client/config/DefaultClientConfigImplTest.java
浏览文件 @
5b791450
...
...
@@ -24,7 +24,8 @@ public class DefaultClientConfigImplTest {
assertEquals
(
"1000"
,
config
.
getProperty
(
CommonClientConfigKey
.
ConnectTimeout
));
assertEquals
(
1000
,
config
.
getPropertyWithType
(
CommonClientConfigKey
.
ConnectTimeout
).
intValue
());
config
.
setPropertyWithType
(
CommonClientConfigKey
.
ConnectTimeout
,
2000
);
assertEquals
(
2000
,
config
.
getPropertyWithType
(
CommonClientConfigKey
.
ConnectTimeout
).
intValue
());
// The archaius property should override code override
assertEquals
(
1000
,
config
.
getPropertyWithType
(
CommonClientConfigKey
.
ConnectTimeout
).
intValue
());
}
@Test
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录