2011-12-07 2 views
4

私はNettyの初心者です。Netty Camelサンプル

私はいくつかのサンプルを探しています。 (好ましくはCamel NettyコンポーネントとSpringを使用する必要はありませんが)

具体的には、TCPメッセージを消費するサンプルのNettyアプリケーションです。

また、このNettyアプリをテストできるJUnitテストを作成するにはどうすればよいですか?

おかげで、 ダル

答えて

5

私はあなたがまだキャメルと統合するとします。私は最初にcamel documentationを見ます。それがあなたを苛立たさせたら、実験を始める必要があります。私は、Camel ProcessorをNetty Serverとして作成した例があります。 Nettyコンポーネントは、Fromエンドポイントが消費するサーバーであり、Toエンドポイントが生成するクライアントであるように機能します。私はサーバーであったエンドポイントを必要とし、コンポーネントはそれをサポートしていませんでした。私はCamel ProcessorをSpring Beanとして実装して、初期化されたときにNetty Serverを起動しました。しかし、JBoss Netty documentation and samplesは非常に良いです。それらを踏み出すことは価値があります。

ここに私のスリムな例があります。これは、接続されているすべてのクライアントにメッセージを送信するサーバーです。あなたが網状に新しいしている場合、私は非常に私は上記にリンクされているサンプルを通過勧め:

public class NettyServer implements Processor { 

private final ChannelGroup channelGroup = new DefaultChannelGroup(); 
private NioServerSocketChannelFactory serverSocketChannelFactory = null; 
private final ExecutorService executor = Executors.newCachedThreadPool(); 

private String listenAddress = "0.0.0.0"; // overridden by spring-osgi value 
private int listenPort = 51501; // overridden by spring-osgi value 

@Override 
public void process(Exchange exchange) throws Exception { 
    byte[] bytes = (byte[]) exchange.getIn().getBody(); 
    // send over the wire 
    sendMessage(bytes); 
} 

public synchronized void sendMessage(byte[] message) { 
    ChannelBuffer cb = ChannelBuffers.copiedBuffer(message); 
    //writes to all clients connected. 
    this.channelGroup.write(cb); 
} 

private class NettyServerHandler extends SimpleChannelUpstreamHandler { 

    @Override 
    public void channelOpen(ChannelHandlerContext ctx, ChannelStateEvent e) throws Exception { 
     super.channelOpen(ctx, e); 
     //add client to the group. 
     NettyServer.this.channelGroup.add(e.getChannel()); 

    } 

    // Perform an automatic recon. 
    @Override 
    public void channelConnected(ChannelHandlerContext ctx, ChannelStateEvent e) throws Exception { 
     super.channelConnected(ctx, e); 
     // do something here when a clien connects. 
    } 

    @Override 
    public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) { 
     // Do something when a message is received... 
    } 

    @Override 
    public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e) { 
     // Log the exception/ 
    } 

} 

private class PublishSocketServerPipelineFactory implements ChannelPipelineFactory { 

    @Override 
    public ChannelPipeline getPipeline() throws Exception { 
     // need to set the handler. 
     return Channels.pipeline(new NettyServerHandler()); 
    } 
} 

// called by spring to start the server 
public void init() { 

    try { 
     this.serverSocketChannelFactory = new NioServerSocketChannelFactory(this.executor, this.executor); 
     final ServerBootstrap serverBootstrap = new ServerBootstrap(this.serverSocketChannelFactory); 
     serverBootstrap.setPipelineFactory(new PublishSocketServerPipelineFactory()); 
     serverBootstrap.setOption("reuseAddress", true); 
     final InetSocketAddress listenSocketAddress = new InetSocketAddress(this.listenAddress, this.listenPort); 
     this.channelGroup.add(serverBootstrap.bind(listenSocketAddress)); 

    } catch (Exception e) { 

    } 
} 

// called by spring to shut down the server. 
public void destroy() { 

    try { 
     this.channelGroup.close(); 
     this.serverSocketChannelFactory.releaseExternalResources(); 
     this.executor.shutdown(); 
    } catch (Exception e) { 
    } 
} 

// injected by spring 
public void setListenAddress(String listenAddress) { 
    this.listenAddress = listenAddress; 
} 

// injected by spring 
public void setListenPort(int listenPort) { 
    this.listenPort = listenPort; 
} 

}

0

ラクダのリリースには、多くの例があるが、ネッティーコンポーネントのためのシンプルなものなし。

Nettyコンポーネントを使用すると、メッセージを消費してクライアントに返すソケットサーバーをセットアップできます。

  1. を処理するために、POJOクラスを使用したTCPメッセージ
  2. を受け取るためにラクダでネッティーコンポーネントを使用:ウェブ上の検索のいくつかの時間後、私は表示するために、単純なキャメル、ネッティーHello Worldの例として tutorial using netty component in camel自分自身を作成し​​ますメッセージを受信して​​応答を作成する
  3. クライアントに応答を返します。
関連する問題