【问题标题】:Is it possible to generate a vertx service proxy that references an rx vertx instance?是否可以生成引用 rx vertx 实例的 vertx 服务代理?
【发布时间】:2018-09-09 01:51:49
【问题描述】:

我正在尝试开发数据库服务代理并使用扩展 io.vertx.reactivex.core.AbstractVerticle 的 Verticle,以便我可以在数据库调用周围使用 rxJava 语义。问题是,当我编码生成服务代理时,我得到了这个:

ServiceVertxEBProxy.java:[37,1] a type with the same simple name is already defined by the single-type-import of io.vertx.core.Vertx

数据库服务负责处理共享的dbclient,我是通过:

    public Single<SQLConnection> getConnection()
{
    JDBCClient dbClient = JDBCClient.createShared( vertx, CONFIG, DATASOURCE );

    return dbClient.rxGetConnection().flatMap( conn -> {
        Single<SQLConnection> connectionSingle = Single.just( conn );
        return connectionSingle.doFinally( conn::close );
    } );
}

是否可以使用@ProxyGen 在服务中创建引用 rxJava 的代理客户端?

作为参考,接口声明了工厂方法来实例化服务,遵循 vertx.io 文档。

import io.vertx.reactivex.core.Vertx;

@ProxyGen
public interface ChatDbService
{
    static ChatDbService create( Vertx vertx )
    {
        return new ChatDbServiceImpl( vertx );
    }

    static ChatDbService createProxy( Vertx vertx, String address )
    {
        return new ChatDbServiceVertxEBProxy( vertx.getDelegate(), address );
    }

} 

我们将不胜感激。

【问题讨论】:

    标签: rx-java vert.x vertx-verticle


    【解决方案1】:

    服务代理生成无法与 RxJava 一起使用,因为它使用 Vert.x 异步模型。由于您没有发布ServiceVertx 接口,因此实际上不可能就您的应用程序向您提供进一步的建议,如果可以的话,我们可以进一步详细说明。

    【讨论】:

    • 这里的接口是日志消息中生成的ServiceVertxEBProxy的来源,我复制trace的时候漏掉了前缀。我还省略了@Fluent 方法定义,因为它只是导致构建失败的工厂。作为 vertx+rx 的新手,我不确定普通的 vert.x 模型以及为什么它不是异步的。是不是因为 vert.x 使用了回调语义,在消息传递语义上是同步的?我发布的示例只是出现此编译失败的几个变体之一。我只是认为这是命名空间冲突,而不是兼容性。
    • ...我可以在问题中添加任何内容来帮助诊断,还是答案只是我不能在服务接口中使用反应性顶点引用?本质上,我正在做 wiki 示例所做的事情; http verticle + db verticle,我用服务代理连接。 http verticle 调用实现接口的ServiceImpl 中实现的代理方法。计划是启动 db verticle 并使用工厂实例化 dBserviceImpl。除此之外,我想我可以直接从 db verticle 使用 dbServiceImpl(vertx) 构造函数并绕过 fac?
    【解决方案2】:

    不确定这是否是您想要的,但我们希望 @ProxyGen 为我们生成一个 Rxified API 并偶然发现了一个解决方案。我们发现您需要包含此依赖项,然后@ProxyGen 将使用 Rxified 生成的服务创建一个名为 reactivex 的包。

        <dependency>
          <groupId>io.vertx</groupId>
          <artifactId>vertx-rx-java2</artifactId>
        </dependency>
    

    【讨论】:

      猜你喜欢
      • 2023-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多