Scala 如何通过akka流接收gzip格式的udp GELF消息
我正在尝试编写一个程序,它监听另一个程序以UDP和gzips格式发送假GELF消息的特定端口。当GELF消息没有被gzip压缩时,处理它很容易,但是当它被gzip压缩时,我不知道该怎么做。我的代码和错误是: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(
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)中
我怎么处理这个问题?我也有这个问题,你找到什么了吗?我也有这个问题,你找到什么了吗?