Ocelot容许您指定服务发现提供程序,并使用它来查找Ocelot正在将请求转发给下游服务的主机和端口。目前,这仅在GlobalConfiguration部分中受支持,这意味着全部ReRoute将使用相同的服务发现提供程序,以便在ReRoute级别指定ServiceName。javascript
Consul
GlobalConfiguration中须要如下内容。 提供者是必需的,若是你没有指定主机和端口,默认使用Consul。html
"ServiceDiscoveryProvider": {
"Host": "localhost",
"Port": 9500
}
未来咱们能够添加一个功能,容许ReRoute配置服务发现提供程序。java
为了告诉Ocelot一个ReRoute须要使用服务发现提供程序来发现下游主机和端口,您必须在下游请求配置中添加ServiceName,UseServiceDiscovery和LoadBalancer。 目前Ocelot有RoundRobin(轮询)和LeastConnection(最少链接)两个负载均衡的算法。 若是没有指定负载均衡器,Ocelot将不会均衡请求。git
{
"DownstreamPathTemplate": "/api/posts/{postId}",
"DownstreamScheme": "https",
"UpstreamPathTemplate": "/posts/{postId}",
"UpstreamHttpMethod": [ "Put" ],
"ServiceName": "product",
"LoadBalancer": "LeastConnection",
"UseServiceDiscovery": true
}
如此设置以后,Ocelot将从服务发现提供程序查找下游主机和端口,并经过可用服务平衡请求。github
ACL Token
若是您使用Consul的ACL,Ocelot也支持添加X-Consul-Token头。 为了实现ACL访问,您必须添加下面的附加属性Token。算法
"ServiceDiscoveryProvider": {
"Host": "localhost",
"Port": 9500,
"Token": "footoken"
}
Ocelot会将这个令牌添加到用来发出请求的consul客户端,而后用于后续的每一个请求。json
Eureka
这个功能是做为问题 262的一部分被提出。为Netflix的Eureka服务发现提供程序添加支持。 主要缘由是它是Steeltoe的一个关键部分,Steeltoe又与Pivotal有关! 反正背景很牛逼。api
为了使Eureka工做,须要在 ocelot.json中添加以下配置..服务器
"ServiceDiscoveryProvider": {
"Type": "Eureka"
}
遵循这里的指导,您可能还须要添加一些内容到appsettings.json。 例如,下面的json告诉steeltoe/关键服务在哪里寻找服务发现服务器,以及服务是否应该向其注册。markdown
"eureka": {
"client": {
"serviceUrl": "http://localhost:8761/eureka/",
"shouldRegisterWithEureka": false,
"shouldFetchRegistry": true
}
}
我被告知,若是shouldRegisterWithEureka是false,那么shouldFetchRegistry将会默认为true,因此你不须要显式地将它留在这里。
如今Ocelot将在启动时注册全部必要的服务,而且若是配置有上述json,则会将其注册到Eureka。其中一项服务每30秒(默认)轮询一次Eureka获取最新的服务状态并将其保留在内存中。当Ocelot要求提供给定的服务时,它会从内存中检索出来,所以性能不是一个大问题。注意,此代码由Pivotal.Discovery.Client 的NuGet包提供,因此很是感谢他们的辛勤工做。
原做者:小水 原文连接:https://www.cnblogs.com/loogn/p/9007776.html