将音频文件放入kafka,使用spring cloud stream

时间:2017-05-05 12:52:28

标签: apache-kafka spring-cloud-stream

我试图在kafka中放入带json的音频文件, 她是代码 producer Code

在消费者中,我试图获取此文件Consumer code 错误:

  

org.springframework.messaging.MessagingException:调用com.sofrecom.service.VoiceCampaignCreator #process [1 args]时抛出异常;嵌套异常是java.lang.NullPointerException       在org.springframework.cloud.stream.binding.StreamListenerMessageHandler.handleRequestMessage(StreamListenerMessageHandler.java:56)       在org.springframework.integration.handler.AbstractReplyProducingMessageHandler.handleMessageInternal(AbstractReplyProducingMessageHandler.java:109)       在org.springframework.integration.handler.AbstractMessageHandler.handleMessage(AbstractMessageHandler.java:127)       at org.springframework.cloud.stream.binding.DispatchingStreamListenerMessageHandler $ ConditionalStreamListenerHandler.handleMessage(DispatchingStreamListenerMessageHandler.java:122)       在org.springframework.cloud.stream.binding.DispatchingStreamListenerMessageHandler.handleRequestMessage(DispatchingStreamListenerMessageHandler.java:75)       在org.springframework.integration.handler.AbstractReplyProducingMessageHandler.handleMessageInternal(AbstractReplyProducingMessageHandler.java:109)       在org.springframework.integration.handler.AbstractMessageHandler.handleMessage(AbstractMessageHandler.java:127)       在org.springframework.integration.dispatcher.AbstractDispatcher.tryOptimizedDispatch(AbstractDispatcher.java:116)       在org.springframework.integration.dispatcher.UnicastingDispatcher.doDispatch(UnicastingDispatcher.java:148)       在org.springframework.integration.dispatcher.UnicastingDispatcher.dispatch(UnicastingDispatcher.java:121)       在org.springframework.integration.channel.AbstractSubscribableChannel.doSend(AbstractSubscribableChannel.java:89)       在org.springframework.integration.channel.AbstractMessageChannel.send(AbstractMessageChannel.java:423)       在org.springframework.integration.channel.AbstractMessageChannel.send(AbstractMessageChannel.java:373)       在org.springframework.messaging.core.GenericMessagingTemplate.doSend(GenericMessagingTemplate.java:115)       在org.springframework.messaging.core.GenericMessagingTemplate.doSend(GenericMessagingTemplate.java:45)       在org.springframework.messaging.core.AbstractMessageSendingTemplate.send(AbstractMessageSendingTemplate.java:105)       在org.springframework.integration.handler.AbstractMessageProducingHandler.sendOutput(AbstractMessageProducingHandler.java:292)       在org.springframework.integration.handler.AbstractMessageProducingHandler.produceOutput(AbstractMessageProducingHandler.java:212)       在org.springframework.integration.handler.AbstractMessageProducingHandler.sendOutputs(AbstractMessageProducingHandler.java:129)       在org.springframework.integration.handler.AbstractReplyProducingMessageHandler.handleMessageInternal(AbstractReplyProducingMessageHandler.java:115)       在org.springframework.integration.handler.AbstractMessageHandler.handleMessage(AbstractMessageHandler.java:127)       在org.springframework.integration.channel.FixedSubscriberChannel.send(FixedSubscriberChannel.java:70)       在org.springframework.integration.channel.FixedSubscriberChannel.send(FixedSubscriberChannel.java:64)       在org.springframework.messaging.core.GenericMessagingTemplate.doSend(GenericMessagingTemplate.java:115)       在org.springframework.messaging.core.GenericMessagingTemplate.doSend(GenericMessagingTemplate.java:45)       在org.springframework.messaging.core.AbstractMessageSendingTemplate.send(AbstractMessageSendingTemplate.java:105)       在org.springframework.integration.endpoint.MessageProducerSupport.sendMessage(MessageProducerSupport.java:171)       在org.springframework.integration.kafka.inbound.KafkaMessageDrivenChannelAdapter.access $ 000(KafkaMessageDrivenChannelAdapter.java:54)       在org.springframework.integration.kafka.inbound.KafkaMessageDrivenChannelAdapter $ IntegrationRecordMessageListener.onMessage(KafkaMessageDrivenChannelAdapter.java:288)       在org.springframework.integration.kafka.inbound.KafkaMessageDrivenChannelAdapter $ IntegrationRecordMessageListener.onMessage(KafkaMessageDrivenChannelAdapter.java:279)       在org.springframework.kafka.listener.adapter.RetryingAcknowledgingMessageListenerAdapter $ 1.doWithRetry(RetryingAcknowledgingMessageListenerAdapter.java:77)       在org.springframework.kafka.listener.adapter.RetryingAcknowledgingMessageListenerAdapter $ 1.doWithRetry(RetryingAcknowledgingMessageListenerAdapter.java:72)       在org.springframework.retry.support.RetryTemplate.doExecute(RetryTemplate.java:286)       在org.springframework.retry.support.RetryTemplate.execute(RetryTemplate.java:179)       在org.springframework.kafka.listener.adapter.RetryingAcknowledgingMessageListenerAdapter.onMessage(RetryingAcknowledgingMessageListenerAdapter.java:72)       在org.springframework.kafka.listener.adapter.RetryingAcknowledgingMessageListenerAdapter.onMessage(RetryingAcknowledgingMessageListenerAdapter.java:39)       at org.springframework.kafka.listener.KafkaMessageListenerContainer $ ListenerConsumer.invokeRecordListener(KafkaMessageListenerContainer.java:771)       在org.springframework.kafka.listener.KafkaMessageListenerContainer $ ListenerConsumer.invokeListener(KafkaMessageListenerContainer.java:715)       在org.springframework.kafka.listener.KafkaMessageListenerContainer $ ListenerConsumer.access $ 2600(KafkaMessageListenerContainer.java:231)       在org.springframework.kafka.listener.KafkaMessageListenerContainer $ ListenerConsumer $ ListenerInvoker.run(KafkaMessageListenerContainer.java:1004)       at java.util.concurrent.Executors $ RunnableAdapter.call(Executors.java:511)       at java.util.concurrent.FutureTask.run(FutureTask.java:266)       在java.lang.Thread.run(Thread.java:745)   引起:java.lang.NullPointerException:null       at org.apache.tomcat.util.http.fileupload.disk.DiskFileItem.getSize(DiskFileItem.java:267)       在org.apache.catalina.core.ApplicationPart.getSize(ApplicationPart.java:110)       at org.springframework.web.multipart.support.StandardMultipartHttpServletRequest $ StandardMultipartFile.getSize(StandardMultipartHttpServletRequest.java:287)       在com.sofrecom.service.VoiceCampaignCreator.process(VoiceCampaignCreator.java:44)       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)       at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)       at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)       at java.lang.reflect.Method.invoke(Method.java:498)       在org.springframework.messaging.handler.invocation.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:180)       在org.springframework.messaging.handler.invocation.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:112)       在org.springframework.cloud.stream.binding.StreamListenerMessageHandler.handleRequestMessage(StreamListenerMessageHandler.java:48)       ...省略了42个常见帧

请帮助!

1 个答案:

答案 0 :(得分:2)

问题似乎很明显......

  

引起:java.lang.NullPointerException:在org.apache.catalina.core.ApplicationPart.getSize的org.apache.tomcat.util.http.fileupload.disk.DiskFileItem.getSize(DiskFileItem.java:267)中为null (ApplicationPart.java:110)org.springframework.web.multipart.support.StandardMultipartHttpServletRequest $ StandardMultipartFile.getSize(StandardMultipartHttpServletRequest.java:287)at com.sofrecom.service.VoiceCampaignCreator.process(VoiceCampaignCreator.java:44)

看起来您正在尝试在Web环境之外解码Web请求。在将数据发送到Kafka之前,您需要解码多部分。

修改

DiskFileItem ...

private transient DeferredFileOutputStream dfos;

... dfos是暂时的 - 因此它不会被序列化(显然 - 因为它是一个流)。