Search in sources :

Example 1 with RemotingIOException

use of pers.cy.iris.commons.exception.RemotingIOException in project iris by chicc999.

the class NettyTransport method async.

@Override
public ResponseFuture async(Channel channel, Command command, CommandCallback callback) throws RemotingIOException {
    ArgumentUtil.isNotNull(new String[] { "channel", "command", "callback" }, channel, command, callback);
    // 同步调用
    final ResponseFuture responseFuture = new ResponseFuture(channel, command, config.getSendTimeout(), callback);
    futures.put(command.getRequestId(), responseFuture);
    channel.writeAndFlush(command).addListener(new ChannelFutureListener() {

        @Override
        public void operationComplete(ChannelFuture future) throws Exception {
            //写入过程出现异常,通知response,移除requestId,断开连接
            if (!future.isSuccess()) {
                Throwable failCause;
                if (future.cause() == null) {
                    failCause = new Throwable("发送请求发生了未知的错误");
                } else {
                    failCause = future.cause();
                }
                logger.error("send request error", failCause);
                responseFuture.cancel(failCause);
                futures.remove(responseFuture.getRequestId());
                future.channel().close();
            }
        }
    });
    return responseFuture;
}
Also used : ResponseFuture(pers.cy.iris.commons.network.ResponseFuture) RequestTimeoutException(pers.cy.iris.commons.exception.RequestTimeoutException) RemotingIOException(pers.cy.iris.commons.exception.RemotingIOException)

Example 2 with RemotingIOException

use of pers.cy.iris.commons.exception.RemotingIOException in project iris by chicc999.

the class NettyClientTest method init.

private void init() {
    nettyClient = new NettyClient(new NettyClientConfig());
    try {
        nettyClient.start();
    } catch (Exception e) {
        e.printStackTrace();
    }
    try {
        Channel channel = nettyClient.createChannelSync(new InetSocketAddress("localhost", 50088));
        PutMessage command = new PutMessage();
        command.setProducerId(new ProducerId(new ConnectionId(new ClientId("1.0", "localhost", System.currentTimeMillis()))));
        Message message = new Message("test", "第一条消息", "1");
        message.setApp("app");
        Message[] messages = new Message[1];
        messages[0] = message;
        command.setMessages(messages);
        Command command1 = nettyClient.sync(channel, command, 10000);
        if (command1.getHeader().getStatus() != 200) {
            System.out.println(command1.getHeader().getError());
        }
    } catch (ConnectException e) {
        e.printStackTrace();
    } catch (RequestTimeoutException e) {
        e.printStackTrace();
    } catch (RemotingIOException e) {
        e.printStackTrace();
    }
}
Also used : Message(pers.cy.iris.commons.model.message.Message) PutMessage(pers.cy.iris.commons.network.protocol.request.PutMessage) ProducerId(pers.cy.iris.commons.network.netty.session.ProducerId) InetSocketAddress(java.net.InetSocketAddress) Channel(io.netty.channel.Channel) RemotingIOException(pers.cy.iris.commons.exception.RemotingIOException) RequestTimeoutException(pers.cy.iris.commons.exception.RequestTimeoutException) ConnectException(pers.cy.iris.commons.exception.ConnectException) RemotingIOException(pers.cy.iris.commons.exception.RemotingIOException) NettyClient(pers.cy.iris.commons.network.netty.client.NettyClient) RequestTimeoutException(pers.cy.iris.commons.exception.RequestTimeoutException) ConnectionId(pers.cy.iris.commons.network.netty.session.ConnectionId) Command(pers.cy.iris.commons.network.protocol.Command) NettyClientConfig(pers.cy.iris.commons.network.netty.client.NettyClientConfig) ClientId(pers.cy.iris.commons.network.netty.session.ClientId) PutMessage(pers.cy.iris.commons.network.protocol.request.PutMessage) ConnectException(pers.cy.iris.commons.exception.ConnectException)

Example 3 with RemotingIOException

use of pers.cy.iris.commons.exception.RemotingIOException in project iris by chicc999.

the class ClearTimeoutFutureTask method run.

@Override
public void run() {
    if (!parent.isStarted()) {
        return;
    }
    Iterator<Map.Entry<Integer, ResponseFuture>> it = futures.entrySet().iterator();
    Map.Entry<Integer, ResponseFuture> entry;
    ResponseFuture responseFuture;
    long timeout;
    while (it.hasNext()) {
        entry = it.next();
        responseFuture = entry.getValue();
        timeout = responseFuture.getBeginTime() + responseFuture.getTimeout() + 1000;
        if (timeout <= SystemClock.currentTimeMillis()) {
            it.remove();
            if (!responseFuture.isDone()) {
                try {
                    responseFuture.cancel(new RemotingIOException("请求" + responseFuture.getRequestId() + "超时," + "链接为" + responseFuture.getChannel()));
                } catch (Throwable e) {
                    logger.error("clear timeout response exception", e);
                }
                logger.info(String.format("remove timeout request id=%d begin=%d timeout=%d", responseFuture.getRequestId(), responseFuture.getBeginTime(), timeout));
            }
        }
    }
}
Also used : RemotingIOException(pers.cy.iris.commons.exception.RemotingIOException) ResponseFuture(pers.cy.iris.commons.network.ResponseFuture) Map(java.util.Map)

Example 4 with RemotingIOException

use of pers.cy.iris.commons.exception.RemotingIOException in project iris by chicc999.

the class NettyTransport method sync.

@Override
public Command sync(Channel channel, Command command, int timeout) throws RemotingIOException, RequestTimeoutException {
    int sendTimeout = timeout <= 0 ? config.getSendTimeout() : timeout;
    // 同步调用
    ResponseFuture future = async(channel, command, null);
    future.setTimeout(sendTimeout);
    Command response;
    try {
        response = future.get(sendTimeout);
    } catch (InterruptedException e) {
        throw new RemotingIOException("线程被中断", e);
    }
    if (!future.isDone()) {
        throw new RequestTimeoutException("请求 requestId=" + command.getRequestId() + " 超时");
    }
    if (!future.isSuccess()) {
        throw new RemotingIOException(future.getCause());
    }
    return response;
}
Also used : RequestTimeoutException(pers.cy.iris.commons.exception.RequestTimeoutException) Command(pers.cy.iris.commons.network.protocol.Command) RemotingIOException(pers.cy.iris.commons.exception.RemotingIOException) ResponseFuture(pers.cy.iris.commons.network.ResponseFuture)

Aggregations

RemotingIOException (pers.cy.iris.commons.exception.RemotingIOException)4 RequestTimeoutException (pers.cy.iris.commons.exception.RequestTimeoutException)3 ResponseFuture (pers.cy.iris.commons.network.ResponseFuture)3 Command (pers.cy.iris.commons.network.protocol.Command)2 Channel (io.netty.channel.Channel)1 InetSocketAddress (java.net.InetSocketAddress)1 Map (java.util.Map)1 ConnectException (pers.cy.iris.commons.exception.ConnectException)1 Message (pers.cy.iris.commons.model.message.Message)1 NettyClient (pers.cy.iris.commons.network.netty.client.NettyClient)1 NettyClientConfig (pers.cy.iris.commons.network.netty.client.NettyClientConfig)1 ClientId (pers.cy.iris.commons.network.netty.session.ClientId)1 ConnectionId (pers.cy.iris.commons.network.netty.session.ConnectionId)1 ProducerId (pers.cy.iris.commons.network.netty.session.ProducerId)1 PutMessage (pers.cy.iris.commons.network.protocol.request.PutMessage)1