Scala 如何通过akka流接收gzip格式的udp GELF消息

Scala 如何通过akka流接收gzip格式的udp GELF消息,scala,udp,akka-stream,gzipstream,gelf,Scala,Udp,Akka Stream,Gzipstream,Gelf,我正在尝试编写一个程序,它监听另一个程序以UDP和gzips格式发送假GELF消息的特定端口。当GELF消息没有被gzip压缩时,处理它很容易,但是当它被gzip压缩时,我不知道该怎么做。我的代码和错误是: class ListenUdp(remote: InetSocketAddress) extends ActorPublisher[GelfMessage] with ActorLogging { import context.system IO(Udp) ! Udp.Bind(

我正在尝试编写一个程序,它监听另一个程序以UDP和gzips格式发送假GELF消息的特定端口。当GELF消息没有被gzip压缩时,处理它很容易,但是当它被gzip压缩时,我不知道该怎么做。我的代码和错误是:

class ListenUdp(remote: InetSocketAddress) extends ActorPublisher[GelfMessage] with ActorLogging {

  import context.system

  IO(Udp) ! Udp.Bind(self, remote)

  def receive: Receive = {
    case Udp.Bound(local) =>
    log.info(s"############ local: $local")
    context.become(ready(sender()))
  }

  def ready(socket: ActorRef): Receive = {
    case Udp.Received(data, _) =>
      convertToGelf(data.decodeString("UTF-8")) match {
    case Success(message) => onNext(message)
    case Failure(ex0) => ex0.printStackTrace()
  }

  case Udp.Unbind => socket ! Udp.Unbind
  case Udp.Unbound => context.stop(self)

  }
}
com.fasterxml.jackson.core.JsonParseException:非法字符((CTRL-CHAR,代码31)):令牌之间只允许有规则的空白(\r\n\t) ��8.�TE����D�xP����ϕ���8.�3.��nn+����或ֲ+4ĥR�拜恩��|>J��C�+4$�9cV� �E7v�A.�����_@Aq�磺主键�AȾu 8������\�我�ႌ�ɬq���Q���T��ɰEB����s�;��%�[[nGh}�F  0Cs�(�I0�� ���>�� ; 行:1,列:2] 位于com.fasterxml.jackson.core.JsonParser.\u constructError(JsonParser.java:1702) 在com.fasterxml.jackson.core.base.ParserMinimalBase.\u报告错误(ParserMinimalBase.java:558) 位于com.fasterxml.jackson.core.base.ParserMinimalBase.\u throwInvalidSpace(ParserMinimalBase.java:509) 位于com.fasterxml.jackson.core.json.ReaderBasedJsonParser.\u skipWSOrEnd(ReaderBasedJsonParser.java:2364) 位于com.fasterxml.jackson.core.json.ReaderBasedJsonParser.nextToken(ReaderBasedJsonParser.java:644) 位于com.fasterxml.jackson.databind.ObjectMapper.\u initForReading(ObjectMapper.java:3834) 位于com.fasterxml.jackson.databind.ObjectMapper.\u readValue(ObjectMapper.java:3756) 位于com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2099) play.api.libs.json.jackson.JacksonJson$.parseJsValue(JacksonJson.scala:234) at play.api.libs.json.StaticBinding$.parseJsValue(StaticBinding.scala:15) at play.api.libs.json.json$.parse(json.scala:168) 在io.skul.ListenUdp$$anonfun$io$skul$ListenUdp$$convertToGelf$1.apply(ListenUdp.scala:48) 在io.skul.ListenUdp$$anonfun$io$skul$ListenUdp$$convertToGelf$1.apply(ListenUdp.scala:46) 在scala.util.Try$.apply(Try.scala:192) 在io.skul.ListenUdp.io$skul$ListenUdp$$convertToGelf(ListenUdp.scala:46) 在io.skul.ListenUdp$$anonfun$ready$1.applyOrElse(ListenUdp.scala:36) 在akka.actor.actor$class.aroundReceive(actor.scala:484) 在io.skul.ListenUdp.akka$stream$actor$ActorPublisher$$super$aroundReceive(ListenUdp.scala:22) 在akka.stream.actor.ActorPublisher$class.aroundReceive(ActorPublisher.scala:325) 在io.skul.ListenUdp.aroundReceive(ListenUdp.scala:22) 在akka.actor.ActorCell.receiveMessage(ActorCell.scala:526) 在akka.actor.ActorCell.invoke(ActorCell.scala:495) 在akka.dispatch.Mailbox.processMailbox(Mailbox.scala:257) 在akka.dispatch.Mailbox.run(Mailbox.scala:224) 在akka.dispatch.Mailbox.exec(Mailbox.scala:234) 位于scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260) 位于scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339) 位于scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979) 在scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)中


我怎么处理这个问题?

我也有这个问题,你找到什么了吗?我也有这个问题,你找到什么了吗?