Search in sources :

Example 6 with Channel

use of com.weibo.api.motan.transport.Channel in project motan by weibocom.

the class NettyServerExample method main.

public static void main(String[] args) throws InterruptedException {
    URL url = new URL("netty", "localhost", 18080, "com.weibo.api.motan.procotol.example.IHello");
    NettyServer nettyServer = new NettyServer(url, new MessageHandler() {

        @Override
        public Object handle(Channel channel, Object message) {
            Request request = (Request) message;
            System.out.println("[server] get request: requestId: " + request.getRequestId() + " method: " + request.getMethodName());
            DefaultResponse response = new DefaultResponse();
            response.setRequestId(request.getRequestId());
            response.setValue("method: " + request.getMethodName() + " time: " + System.currentTimeMillis());
            return response;
        }
    });
    nettyServer.open();
    System.out.println("~~~~~~~~~~~~~ Server open ~~~~~~~~~~~~~");
    Thread.sleep(100000);
}
Also used : DefaultResponse(com.weibo.api.motan.rpc.DefaultResponse) MessageHandler(com.weibo.api.motan.transport.MessageHandler) Channel(com.weibo.api.motan.transport.Channel) Request(com.weibo.api.motan.rpc.Request) URL(com.weibo.api.motan.rpc.URL)

Example 7 with Channel

use of com.weibo.api.motan.transport.Channel in project motan by weibocom.

the class UnSerializableClass method testNettyEncodeException.

@Test
public void testNettyEncodeException() throws Exception {
    NettyServer nettyServer;
    nettyServer = new NettyServer(url, new MessageHandler() {

        @Override
        public Object handle(Channel channel, Object message) {
            Request request = (Request) message;
            DefaultResponse response = new DefaultResponse();
            response.setRequestId(request.getRequestId());
            // 序列化错误
            response.setValue(new UnSerializableClass());
            return response;
        }
    });
    nettyServer.open();
    NettyClient nettyClient = new NettyClient(url);
    nettyClient.open();
    DefaultRequest request = new DefaultRequest();
    request.setRequestId(RequestIdGenerator.getRequestId());
    request.setInterfaceName(url.getPath());
    request.setMethodName("helloSerializable");
    request.setParamtersDesc("com.weibo.api.motan.procotol.example.UnSerializableClass");
    request.setArguments(new Object[] { new UnSerializableClass() });
    try {
        nettyClient.request(request);
        Assert.assertFalse(true);
    } catch (Exception e) {
        Assert.assertTrue(true);
    }
    DefaultRequest request1 = new DefaultRequest();
    request1.setRequestId(RequestIdGenerator.getRequestId());
    request1.setInterfaceName(url.getPath());
    request1.setMethodName("helloSerializable");
    request1.setParamtersDesc("void");
    try {
        nettyClient.request(request1);
        Assert.fail();
    } catch (Exception e) {
        Assert.assertTrue(e.getMessage().contains("error_code: 20002"));
    } finally {
        nettyClient.close();
        nettyServer.close();
    }
}
Also used : DefaultResponse(com.weibo.api.motan.rpc.DefaultResponse) MessageHandler(com.weibo.api.motan.transport.MessageHandler) DefaultRequest(com.weibo.api.motan.rpc.DefaultRequest) Channel(com.weibo.api.motan.transport.Channel) Request(com.weibo.api.motan.rpc.Request) DefaultRequest(com.weibo.api.motan.rpc.DefaultRequest) Test(org.junit.Test)

Example 8 with Channel

use of com.weibo.api.motan.transport.Channel in project motan by weibocom.

the class UnSerializableClass method testNettyDecodeException.

@Test
public void testNettyDecodeException() throws Exception {
    NettyServer nettyServer;
    nettyServer = new NettyServer(url, new MessageHandler() {

        @Override
        public Object handle(Channel channel, Object message) {
            Request request = (Request) message;
            DefaultResponse response = new DefaultResponse();
            response.setRequestId(request.getRequestId());
            response.setValue("error");
            return response;
        }
    });
    nettyServer.open();
    NettyClient nettyClient = new NettyClient(url);
    nettyClient.open();
    DefaultRequest request = new DefaultRequest();
    request.setRequestId(RequestIdGenerator.getRequestId());
    request.setInterfaceName(url.getPath());
    request.setMethodName("hello");
    request.setParamtersDesc("void");
    try {
        nettyClient.request(request);
        Assert.assertTrue(false);
    } catch (Exception e) {
        Assert.assertTrue(e.getMessage().contains("response dataType not support"));
    } finally {
        nettyClient.close();
        nettyServer.close();
    }
}
Also used : DefaultResponse(com.weibo.api.motan.rpc.DefaultResponse) MessageHandler(com.weibo.api.motan.transport.MessageHandler) DefaultRequest(com.weibo.api.motan.rpc.DefaultRequest) Channel(com.weibo.api.motan.transport.Channel) Request(com.weibo.api.motan.rpc.Request) DefaultRequest(com.weibo.api.motan.rpc.DefaultRequest) Test(org.junit.Test)

Example 9 with Channel

use of com.weibo.api.motan.transport.Channel in project motan by weibocom.

the class NettyClient method initClientBootstrap.

/**
	 * 初始化 netty clientBootstrap
	 */
private void initClientBootstrap() {
    bootstrap = new ClientBootstrap(channelFactory);
    bootstrap.setOption("keepAlive", true);
    bootstrap.setOption("tcpNoDelay", true);
    // 实际上,极端情况下,connectTimeout会达到500ms,因为netty nio的实现中,是依赖BossThread来控制超时,
    // 如果为了严格意义的timeout,那么需要应用端进行控制。
    int timeout = getUrl().getIntParameter(URLParamType.connectTimeout.getName(), URLParamType.connectTimeout.getIntValue());
    if (timeout <= 0) {
        throw new MotanFrameworkException("NettyClient init Error: timeout(" + timeout + ") <= 0 is forbid.", MotanErrorMsgConstant.FRAMEWORK_INIT_ERROR);
    }
    bootstrap.setOption("connectTimeoutMillis", timeout);
    // 最大响应包限制
    final int maxContentLength = url.getIntParameter(URLParamType.maxContentLength.getName(), URLParamType.maxContentLength.getIntValue());
    bootstrap.setPipelineFactory(new ChannelPipelineFactory() {

        public ChannelPipeline getPipeline() {
            ChannelPipeline pipeline = Channels.pipeline();
            pipeline.addLast("decoder", new NettyDecoder(codec, NettyClient.this, maxContentLength));
            pipeline.addLast("encoder", new NettyEncoder(codec, NettyClient.this));
            pipeline.addLast("handler", new NettyChannelHandler(NettyClient.this, new MessageHandler() {

                @Override
                public Object handle(Channel channel, Object message) {
                    Response response = (Response) message;
                    NettyResponseFuture responseFuture = NettyClient.this.removeCallback(response.getRequestId());
                    if (responseFuture == null) {
                        LoggerUtil.warn("NettyClient has response from server, but resonseFuture not exist,  requestId={}", response.getRequestId());
                        return null;
                    }
                    if (response.getException() != null) {
                        responseFuture.onFailure(response);
                    } else {
                        responseFuture.onSuccess(response);
                    }
                    return null;
                }
            }));
            return pipeline;
        }
    });
}
Also used : MotanFrameworkException(com.weibo.api.motan.exception.MotanFrameworkException) MessageHandler(com.weibo.api.motan.transport.MessageHandler) Channel(com.weibo.api.motan.transport.Channel) ChannelPipeline(org.jboss.netty.channel.ChannelPipeline) DefaultResponse(com.weibo.api.motan.rpc.DefaultResponse) Response(com.weibo.api.motan.rpc.Response) ClientBootstrap(org.jboss.netty.bootstrap.ClientBootstrap) ChannelPipelineFactory(org.jboss.netty.channel.ChannelPipelineFactory)

Aggregations

Channel (com.weibo.api.motan.transport.Channel)9 DefaultResponse (com.weibo.api.motan.rpc.DefaultResponse)6 Test (org.junit.Test)6 MessageHandler (com.weibo.api.motan.transport.MessageHandler)5 DefaultRequest (com.weibo.api.motan.rpc.DefaultRequest)4 Request (com.weibo.api.motan.rpc.Request)4 MotanFrameworkException (com.weibo.api.motan.exception.MotanFrameworkException)2 YarMessageRouter (com.weibo.api.motan.protocol.yar.YarMessageRouter)2 Response (com.weibo.api.motan.rpc.Response)2 URL (com.weibo.api.motan.rpc.URL)2 YarRequest (com.weibo.yar.YarRequest)2 YarResponse (com.weibo.yar.YarResponse)2 FullHttpResponse (io.netty.handler.codec.http.FullHttpResponse)2 MotanAbstractException (com.weibo.api.motan.exception.MotanAbstractException)1 MotanServiceException (com.weibo.api.motan.exception.MotanServiceException)1 MockChannel (com.weibo.api.motan.mock.MockChannel)1 AttachmentRequest (com.weibo.api.motan.protocol.yar.AttachmentRequest)1 TransportException (com.weibo.api.motan.transport.TransportException)1 ClientBootstrap (org.jboss.netty.bootstrap.ClientBootstrap)1 ChannelPipeline (org.jboss.netty.channel.ChannelPipeline)1