java - Riak(Java客户端)突然停止创建二级索引

标签 java scala jackson riak

注意我在 Scala 中使用 Java 客户端。 case class 注释略有不同。我有以下 POJO:

case class User(
  @(JsonProperty@field)("guid")
  @(RiakKey@field)
  val guid: String,

  @(JsonProperty@field)("email")
  @(JsonSerialize@field)(using=classOf[util.serialization.StringToUrlSerializer])
  @(JsonDeserialize@field)(using=classOf[util.serialization.StringToUrlDeserializer])
  @(RiakIndex@field)(name = "email")
  val email: String,

  @(JsonProperty@field)("passwordHash")
  val passwordHash: String
)

突然,Riak 停止为我的用户存储二级索引。如果我们通过 REST 客户端使用原始 HTTP API,我们仍然可以手动创建二级索引,但在代码中我无法解释它失败的原因。

以下是我们存储 Riak 对象的方式:

/**
   * Riak database operations
   */
  val bucketName = "accounts-user"
  val bucket = DB.client.createBucket(bucketName).enableForSearch().execute()
  val converter = {
    val c = new JSONConverter[User](classOf[User], bucketName)
    c.getObjectMapper().registerModule(DefaultScalaModule)
    c
  }

  def store(o: User) = bucket.store(o).withConverter(converter).withRetrier(DB.retrier).execute()

我们使用的 Jackson 导入如下:

import com.fasterxml.jackson.annotation._
import com.fasterxml.jackson.databind.annotation._

import com.fasterxml.jackson.module.scala._

对象已成功存储,并且未引发错误。问题的原因可能是什么? Jackson 的 DefaultScalaModule 是否可能干扰注释?仅供引用,我确实尝试删除自定义转换器,但它没有解决问题(但是没有删除任何 Scala 模块导入)。谢谢。

编辑

可能相关:最近我们开始通过 NGINX 代理 Riak。我需要同时执行 HTTP 和 TCP proxy_pass 吗?

最佳答案

正如我所怀疑的,使用 NGINX 进行代理是罪魁祸首。虽然我使用 HTTP 客户端访问存储桶,但 Riak Java 客户端实际上使用较低级别(可能是 PBC)协议(protocol)来创建二级索引。不知道为什么它会默默地失败(可能是由于设计),但当我将 NGINX 从 HTTP 切换到 TCP 转发时,问题立即得到解决。

关于java - Riak(Java客户端)突然停止创建二级索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16290194/

相关文章:

java - 无法使我在嵌套循环中创建的菜单正常运行

java - 通用二叉搜索树 Java 类型参数不在范围内

java - Spring Rest 存储库 -> 如何动态省略响应中的字段

scala - scala中的父类(super class)构造函数

java - jackson JSON + Java 泛型

java - jackson .当值从泛型类获取时出现 ClassCastException

java - ffmpeg 从修剪的视频中获取帧的时间

java - C#转Java的加密方法

scala - 如何使用 Akka 2.1.2 可视化 Actor 消息流?

scala - 使用项目中的类的 sbt 自定义任务