2014-09-05 55 views
1

我们正在使用TCP集成进行TCP通信,并且看到在该连接的消息之前收到TcpConnectionCloseEvent的行为。确保弹簧集成事件的顺序正确

这是一个问题,因为我们正在使用TCP事件来跟踪连接等,当我们需要接受我们认为关闭的连接上的消息时,它会产生更复杂的情况。

反过来也是如此 - 有时我们会收到一条消息,表明我们尚未知道的连接已经打开。

是否有任何方法可以确保这些事件的正确顺序,即使它们本质上是异步的?

(感谢在这里stackoverflow,加里伟大的答案)。

回答

0

嗯...

在服务器端,打开的事件是由接受新的连接,而不是连接本身线程出版。尽管我们可能在那里做了一些事情,但是在使用NIO时它仍然不是万无一失的,因为线程模型更加复杂,即使连接本身发布了事件,也无法保证顺序。老实说,我们没有预料到事件会以这种方式被使用 - 主要的驱动程序(对于开放事件)是允许应用程序检测到一个新的连接,而不需要客户端实际发送任何东西(只是连接) - 允许服务器端应用程序接受新连接,获取连接ID的句柄,以便发送欢迎消息。

一种解决方法可能是使用事件入站通道适配器和<delayer/>将事件传递延迟到您的应用程序(在关闭的情况下)。

我真的没有一个很好的解决方案,延迟交付的公开赛;也许只是将“新”连接的入站消息视为“开放”事件(例如,当您在处理消息的线程上检测到此情况并忽略“真实”事件时发布您自己的开放事件)。

+0

好的,谢谢。我们目前正在按照您的描述使用它。我们会继续这样做:) – 2014-09-08 06:48:35