小编Joe*_*ein的帖子

Flink和Play 2.5之间的Akka版本碰撞

在我们的项目中,我们有一个Flink(1.1.3)流式作业,它从一个kafka队列中读取,执行映射函数转换并写入另一个队列.

在我们作为流程的一部分引入传出REST请求之前,这一点很有效.为此,我们使用了PlayFramework WSClient(因为它在我们堆栈的其他位置使用),并以这种方式在代码中创建它:

  val config = new AhcWSClientConfig(wsClientConfig = WSClientConfig())
  val builder = new AhcConfigBuilder(config)
  val ahcConfig = builder.configure().build()
  new AhcWSClient(ahcConfig)(ActorMaterializer()(ActorSystem()))
Run Code Online (Sandbox Code Playgroud)

这在本地运行良好,但在部署并在群集上运行时,我遇到了以下异常:

java.lang.NoSuchMethodError: akka.util.Helpers$.toRootLowerCase(Ljava/lang/String;)Ljava/lang/String;
    at akka.stream.StreamSubscriptionTimeoutSettings$.apply(ActorMaterializer.scala:491)
    at akka.stream.ActorMaterializerSettings$.apply(ActorMaterializer.scala:243)
    at akka.stream.ActorMaterializerSettings$.apply(ActorMaterializer.scala:232)
    at akka.stream.ActorMaterializer$$anonfun$1.apply(ActorMaterializer.scala:41)
    at akka.stream.ActorMaterializer$$anonfun$1.apply(ActorMaterializer.scala:41)
    at scala.Option.getOrElse(Option.scala:121)
    at akka.stream.ActorMaterializer$.apply(ActorMaterializer.scala:41)
    at com.ourstuff.etl.core.utils.web.GlobalWSClient$.generateClient(WSClientFactory.scala:32)
Run Code Online (Sandbox Code Playgroud)

调查一下,我认为这是Akka 2.3.x(由Flink 1.1.X带来)和Akka 2.4.x(由PlayFramework带来)之间的碰撞.

我们将Flink集群升级到1.3.1(以及我们的代码对Flink的依赖),假设这将解决问题.但同样的问题似乎仍然存在.

什么可能仍然导致这个?

akka playframework apache-flink flink-streaming playframework-2.5

7
推荐指数
1
解决办法
373
查看次数

Autofac:使用参数解决依赖关系

我目前正在学习Autofac的API,而我正试图把我的脑袋看作是一个非常常见的用例.

我有一个类(对于这个简单的例子'MasterOfPuppets'),它有一个通过构造函数注入('NamedPuppet')接收的依赖,这个依赖需要一个用(string name)构建的值:

    public class MasterOfPuppets : IMasterOfPuppets
    {
        IPuppet _puppet;

        public MasterOfPuppets(IPuppet puppet)
        {
            _puppet = puppet;
        }
    }

    public class NamedPuppet : IPuppet
    {
        string _name;

        public NamedPuppet(string name)
        {
            _name = name;
        }
    }
Run Code Online (Sandbox Code Playgroud)

我用它们的接口注册这两个类,而不是我想要解析IMasterOfPuppets,并将一个字符串注入到'NamedPuppet'的实例中.

我尝试以下列方式执行此操作:

IMasterOfPuppets master = bs.container.Resolve<IMasterOfPuppets>(new NamedParameter("name", "boby"));
Run Code Online (Sandbox Code Playgroud)

这以运行时错误结束,所以我猜Autofac只会尝试将其注入'MasterOfPuppets'.

所以我的问题是,我怎样才能解决'IMasterOfPuppets'并以最优雅的方式将参数参数传递给它的依赖?其他ioc容器有更好的解决方案吗?

ioc-container autofac

2
推荐指数
1
解决办法
1366
查看次数