问题标签 [scalapb]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
scala - Scala/Akka/Protobuf:无法序列化和反序列化消息
我们正在尝试将 protobuf 与 Akka 一起使用,并通过 protobuf 序列化所有 Akka 消息。对于 Scala,我们有一个名为 ScalaPB 的库,它可以帮助我们生成类,其中包括用于序列化或反序列化数据的方法等parseFrom
。toByteArray
但是,当我们尝试运行程序时,出现以下异常:
application.conf 文件包含以下配置:
这些类通过 ScalaPB 生成并包含所有需要的方法com.knoldus.akkaserialization.msg.example.Bang
。com.knoldus.akkaserialization.msg.example.Message
akka.remote.serialization.ProtobufSerializer
定义源代码,
所以,我们期望,这会自动读取我们的案例类Bang
并Message
执行序列化,但不幸的是得到序列化异常。
你能帮忙弄清楚 ScalaPB 和 ProtoBuff 的确切问题吗?
scala - 尝试编译 SBT 项目时,ScalaPB 无法正常工作。编译失败,“object gen is not a member of package scalapb”
我想在我的 SBT 项目中使用 ScalaPB 插件。但是,当我尝试编译项目时,我收到一个错误,指出“对象 gen 不是包 scalapb 的成员”。那么如何配置此插件以与我的项目一起使用?
我按照 Github 页面上的说明进行操作,但没有成功。
我的项目具有以下结构,也就是标准的 Maven 项目结构:
这是Dependencies.scala
文件:
这是plugins.sbt
文件:
这是build.sbt
文件。这是发生错误的地方。
我希望这个项目在运行时编译时不会出现任何错误
sbt clean compile
但相反,我得到了这个堆栈跟踪
scala - 使用 scalapb 为地图编写 TypeMapper
我想map
以防万一从protobuf生成的类包裹在Option
case class Foo(aMap: Option[Map[String, String]])
为此,我正在尝试使用scalapb.TypeMapper
原型文件如下所示:
但是在编译过程中我有一个错误:
--scala_out: some.Foo.a_map: Field a_map is a map and has type specified. Use key_type or value_type instead.
我该如何解决这个错误?
protocol-buffers - 如何使用 ScalaPB 将 protobuf 枚举生成为字符串?
我的 Protobuf 消息中有以下内容:
GeneratedEnum
我想生成一个字符串,而不是类型,并将值作为特定类型。例如
此链接解释了如何映射为自定义类型,但我不清楚如何映射为值类型。当我尝试以下操作时,ScalaPB 显示应在 String 伴生类中实现的错误。
我怎样才能实现它?还有一种方法可以将Enum
消息中的所有类型转换为String
?
scala - 在scala中访问请求的GRPC上下文
我在 scala/java 中找不到任何示例,其中服务器端正在访问 grpc 请求的上下文(使用 scalapb / grpc.io)。我可以在 golang 中找到很多示例。我用 akka grpc 找到了一些,但我使用的是 scalapb 和 grpc.io
如果有人知道 github 中有一个使用它的 repo 或者可以安排访问它所需的步骤,那将是非常好的你
protocol-buffers - 未找到自定义原始包装器的 ScalaPB TypeMapper
我在用
我有一些自定义的原始包装器(我们没有使用谷歌包装器)
然后我想Int32
在另一条消息中使用原始包装器消息,但在 Scala 案例类中自动取消包装的值:
我创建了一个简单Main.scala
的指定自定义TypeMapper
所以想进入ScalaOption[Int]
而不是Option[Int32]
甚至Option[Option[Int]]
被双重包装,因为每个message
都会Option
自动获取。
但我收到错误:
scala - 在 Akka 类型中,如何反序列化没有 ActorSystem 的序列化 ActorRef?
我对 Akka 世界很陌生,更不用说 Akka 类型了。如果这个人很愚蠢,也很抱歉,:(
所以,我遵循了请求-响应交互模式,让参与者进行交互。这意味着在我的命令中添加一个 actorRef。
但是我的命令都在 protobuf 中。我不得不序列化actorRef。在不知道actor2的ActorSystem的情况下,actor1如何反序列化actor2的actorRef?
我读过一个答案:(https://manuel.bernhardt.io/2018/07/20/akka-anti-patterns-java-serialization/#comment-157564)但我无法理解解决方案......: (
WorkgroupCommand.proto
工作组.scala
代理.scala
有办法吗?如果 Workgroup 和 Agent 都是主要 actorSystem 的子代,会有帮助吗?
scala - 在 ScalaPb 中,如何创建从相同特征扩展的案例对象和案例类?
我所有的案例类和案例对象都应该在 protobuf 中。现在我需要它们属于一个特征。
可悲的是,这就是我所做的:
这个创造
我希望我的 protobuf 产生这样的东西:
scala - 在新消息中使用任何以前的消息
我有一个 protobuf 文件,我在其中定义了多个消息,这些消息都继承了相同的特征(使用option (scalapb.message).extends = "Event";
消息定义内部)。
我想创建一个名为 MultiEvent 的新消息,其中可能包含从 Event 继承的任何消息的序列。
trait Event
事件在 scala 代码中被定义为简单。
这个想法是能够一次发送包含多个消息的特殊消息。
我得到了错误:"Event" is not defined.
。理想情况下,从代码中该字段将是一个简单的 Seq,它重复提供,但它仅适用于标量类型。我在互联网上发现 Any 可能能够完成我想要的,但是在尝试使用它时会出错。
解决此类问题的通常方法是什么?枚举?转换?
谢谢。