I have done something like this. Well not quite exactly to what you want but I can make some suggestions on how to get started.
Lets use the MINA component for this route as I had some issues with the Netty component see this link Exception thrown from Apache Camel Netty Consumer When more than one client sends data. Apparently this has been fixed but as my project got cancelled I never tested it again.
So from your description this will be a text line based protocol a simple route for this would look like this in the DSL
<route>
<from uri="mina2:tcp://localhost:5555?textline=true"/>
<to uri="bean:fileProcessing"/>
</route>
このルートは、localhost のポート 5555 でリッスン ソケットを開きます。このルートは、テキストライン コーデックを使用するようにも設定されています。テキストライン コーデックは、基本的に行末文字で終了するテキスト行です\n
。他のプロトコルを使用する場合は、次の項目を調べる必要があります。
- ProtocolEncoder - ProtocolEncoder は、入力ペイロードを受け取り、バイトを TCP チャネルに配置するタスクを処理します。
- ProtocolDecoder - ProtocolDecoder は、カスタム バイナリ プロトコル メッセージをアプリケーションが理解できるものに解釈します。
- ProtocolCodecFactory — これにより、エンコーダーとデコーダーが作成されます。
Bean にいくつかのロジックを実装してfileProcessing
、応答を送り返すことができます。キャッチがありますが、クライアントは、新しい回線を取得する準備ができたときに要求する必要があります. 私の理解では、これはリクエスト応答シナリオに従います。ただし、私が見たところ、ルートはクライアントからサーバーにメッセージが届く場合にのみアクティブになります。
サーバーからの送信を開始する方法があるかもしれませんが、それを行うには自分で実験する必要があります。私はそのようなことは何もしていません。
重要な読み物は次のとおりです。
私の提案は、このような基本的なルートから始めて、ロジックを拡張してから、遭遇する可能性のある問題に戻ることです。
アップデート:
そのため、これについて少し調査したところ、次の InOnly および InOut のいずれかのパターンに従わないと、サーバーからクライアントにイベントを送信できないようです。
その場合は、MINA または Netty を使用してみてください。