jpos客户端中的连接超时

时间:2018-07-11 07:40:24

标签: jpos

我正在使用jpos客户端(属于Java Spring MVC程序的一类)连接基于ISO8585的服务器,但是由于某种原因服务器无法响应,因此我的程序一直在等待响应并导致我的程序挂起。那么实现连接超时的正确方法是什么? 我的客户端程序如下所示:

public FieldsModal sendFundTransfer(FieldsModal field){
        try {
            JposLogger logger = new JposLogger(ISO_LOG_LOCATION);
            org.jpos.iso.ISOPackager customPackager = new GenericPackager(ISO_PACKAGER);
            ISOChannel channel = new PostChannel(ISO_SERVER_IP, Integer.parseInt(ISO_SERVER_PORT), customPackager);// live
            logger.jposlogconfig(channel);
            channel.connect();

            log4j.info("Connection established using PostChannel");

            ISOMsg m = new ISOMsg();
            m.set(0, field.getMti());
            //m.set(2, field.getField2());
            m.set(3, field.getField3());
            m.set(4, field.getField4());
            m.set(11, field.getField11());
            m.set(12, field.getField12());
            m.set(17, field.getField17());
            m.set(24, field.getField24());
            m.set(32, field.getField32());
            m.set(34, field.getField34());
            m.set(41, field.getField41());
            m.set(43, field.getField43());
            m.set(46, field.getField46());
            m.set(49, field.getField49());
            m.set(102,field.getField102());
            m.set(103,field.getField103());
            m.set(123, field.getField123());
            m.set(125, field.getField125());
            m.set(126, field.getField126());
            m.set(127, field.getField127());

            m.setPackager(customPackager);
            System.out.println(ISOUtil.hexdump(m.pack()));
            channel.send(m);
            log4j.info("Message has been send");

            ISOMsg r = channel.receive();
            r.setPackager(customPackager);
            System.out.println(ISOUtil.hexdump(r.pack()));

            channel.disconnect();

        }catch (Exception err) {
            System.out.println("sendFundTransfer : " + err);

        }
        return field;
    }

1 个答案:

答案 0 :(得分:1)

真正正确的方法是使用第二季度。如果您不需要持久的连接,则只需为该通道设置超时即可。

PostChannel channel = new PostChannel(ISO_SERVER_IP, Integer.parseInt(ISO_SERVER_PORT), customPackager);// live
channel.setTimeout(timeout); //timeout in millies. 

如果在timeout指定的时间内没有任何反应,则通道将自动断开连接,并且您的接收呼叫将引发异常。

替代方法是使用Q2和多路复用器(请参阅QMUX,您需要运行Q2或已弃用的ISOMUX)。