一、背景介绍
系统使用过程中需接收长度特别长的syslog日志,debug发现之前使用UnicastReceivingChannelAdapter接收UDP消息会导致接收的数据不全,因此猜测UnicastReceivingChannelAdapter默认配置的接收字节有限制。
参考TCP and UDP Support (spring.io)的Table 2. UDP Inbound Channel Adapter Attributes,发现有一个属性为receive-buffer-size,意为缓冲区大小设置,缓冲区的大小用于接收datagrampackets。通常设置为最大传输单元(MTU)大小。如果使用较小的缓冲区,则可能会发生截断。文章提到也可以使用检查长度属性(check-length)来检测到这一点。
笔者通过设置check-length为true试了下效果。代码如下:
UnicastReceivingChannelAdapter channelAdapter = new UnicastReceivingChannelAdapter(514);
channelAdapter.setLengthCheck(true);
全部代码可参考使用UnicastReceivingChann