我正在使用Mina2和Camel连接到TCP服务器(通过SSL)。 因为Mina2不提供默认的字节数组解码器,所以我必须自己写一个。
因此,由于某些原因,Mina分割以块为单位接收的数据并多次调用解码函数,当我挖掘文档时,它说多个线程可以处理接收的数据并尝试解码n次。 这是文字:
MINA确保永远不会有多个线程同时为同一个IoSession执行decode()函数,但它并不保证它始终是相同的线程。假设第一个数据由thread-1处理,它决定它还无法解码,当下一个数据到达时,它可以由另一个线程处理。
现在因为我有一个I / O的mina端点,所以camel为所有传输保留了相同的I / O会话对象。
我正在使用IOSession.setAttributes保存解码器状态,比如说。到目前为止收到的特定交换的字节数,并在收到整条消息时完成解码。
我担心的是,如果有两个不同的交换同时进行并且这些不同的线程竞争相同的IOSession属性,则属性可能会损坏。我也似乎无法访问Mina的解码器功能中的camel exchange属性,所以我不能唯一地识别那个特定的交换。
这方面的任何帮助都会很棒!!