我正在查看 netflix 的 hystrix 来处理网络调用。
使用 hystrix,您可以HystrixCommand<E>
为需要使用的每个潜在 RPC 命令定义一个子类。
我有一个 apache thrift 客户端,它有很多命令。是否有任何替代 hystrix 的方法可以让我轻松地将其包裹在整个客户端上,而不必HystrixCommand
为每个函数定义一个类?
Twitter 的 Finagle 是 Netflix 的 Hystrix 的替代品。
Finagle 会根据您的需要为整个客户端创建一个 RPC,当然 Finagle 会讨论 Thrift 以及 Redis、MySQL、memcached 等。
Finagle 是使用 Scala 创建的,但它也可以用于 Java(以及所有 JVM 生态系统语言,如 JRuby 和 Clojure)
当然,您甚至可以在 JVM 之外使用其他语言,因为 Finagle 可以与 Thrift 对话,并且 Thrift 可用于许多其他语言和平台,例如 Go、C# 甚至是 Objective-C,以便在 iPhone 或 iPad 中用作客户端而不是慢速Json/HTTP 调用。
更多关于 Finagle 的信息在这里 -> https://twitter.github.io/finagle/guide/这里是 Finagle Maven 和 Java 的启动项目示例 -> https://github.com/csaltos/hello-finagle-maven
我还在为节俭的客户寻找类似 hystrix 的断路器解决方案。将试用 Phantom ( https://github.com/flipkart/phantom ),它提供了一个带有 hystrix 的节俭代理。
在我正在进行的项目中,我有数百种不同类型的集成,我想要一个通用的解决方案,让我可以将断路器应用于其中任何一个。为此,我使用org.springframework.aop.framework.ProxyFactory
, 和一个自定义类来包装HystrixCommand
which implements org.aopalliance.intercept.MethodInterceptor
。不过,任何动态代理实现都应该有效。
您可能想看一下resilience4j。
在 Hystrix 中,对外部系统的调用必须包装在 HystrixCommand 中。相比之下,这个库提供了高阶函数(装饰器),以通过断路器、速率限制器或隔板来增强任何功能接口、lambda 表达式或方法引用。