scala - Google PubSub 可能存在编码问题
问题描述
从 Alpakka PubSub 库运行订阅源时,我收到了可能的编码数据。
@Singleton
class Consumer @Inject()(config: Configuration, credentialsService: google.creds.Service)(implicit actorSystem: ActorSystem) {
implicit val m: ActorMaterializer = ActorMaterializer.create(actorSystem)
val logger = Logger(this.getClass)
val subName: String = config.get[String]("google.pubsub.subname")
val credentials: Credentials = credentialsService.getCredentials
val pubSubConfig = PubSubConfig(credentials.projectId, credentials.clientEmail, credentials.privateKey)
val subSource: Source[ReceivedMessage, NotUsed] = GooglePubSub.subscribe(subName, pubSubConfig)
val ackSink: Sink[AcknowledgeRequest, Future[Done]] = GooglePubSub.acknowledge(subName, pubSubConfig)
val computeGraph = Flow[ReceivedMessage].map {
x =>
logger.info(x.message.data)
x
}
val ackGraph = Flow.fromFunction((msgs: Seq[ReceivedMessage]) => AcknowledgeRequest(msgs.map(_.ackId).toList))
subSource
.via(computeGraph)
.groupedWithin(10, 5.minutes)
.via(ackGraph)
.to(ackSink)
.run()
}
我从 PubSub 控制台发布消息。我希望我的测试消息会出现,但是在发布时test
我会收到dGVzdA==
. 这是预期的结果吗?我在导入私钥时遇到问题,这可能是它的结果吗?
消费者热切地与 Guice 绑定在一起。
解决方案
通过 REST API 接收的数据将采用base64 编码。我的猜测是使用 REST API的 Alpakka Pub/Sub 库没有正确解码接收到的数据。看起来他们也有一个使用 GRPC Pub/Sub 客户端作为底层的库,可能不会受到这个缺陷的影响?您还可以直接使用 Scala 中的Cloud Pub/Sub Java 客户端库。
推荐阅读
- amazon-web-services - 如何修复“WebSocket API 的连接持续时间:2 小时”的 websocket 限制
- python - 计数对象内 Json 数组中的出现次数
- callback - 在 connectedCallback 中等待 Element Upgrade:FireFox 和 Chromium 的区别
- c# - ASP.NET MVC - 对象不通过控制器传递给 VIew
- python-sphinx - 如何在重组文本中居中对齐表格列?
- r - 绘制威布尔的可能性
- javascript - 如何在 React 中使用媒体查询?
- python - 使用列表推导扩展堆栈
- jquery-mobile - Jquery Mobile:在没有 iframe 的情况下嵌入外部 HTML 文件
- r - 在闪亮的仪表板中的 menuItem 标题中设置空白