forum.bitel.ru
http://forum.bitel.ru/

[6.2] HTTP status code 504: Gateway Time-out
http://forum.bitel.ru/viewtopic.php?f=22&t=13173
Страница 1 из 1

Автор:  maxst-net [ 29 дек 2018, 16:16 ]
Заголовок сообщения:  [6.2] HTTP status code 504: Gateway Time-out

Уровень знаний Java чуть ниже чем начальный, посему большая просьба не пинать.
Написан скрипт для снятия Z-отчетов с кассовых аппаратов PAY VKP-80K-ФА через Сервер CashCheck

Скрипт:
Код:
package ru.bizbi.bgbilling;

import bitel.billing.server.util.MailMsg;
import org.apache.log4j.Logger;
import ru.bitel.bgbilling.common.BGException;
import ru.bitel.bgbilling.kernel.script.server.dev.GlobalScriptBase;
import ru.bitel.bgbilling.plugins.cashcheck.server.CashCheckUtils;
import ru.bitel.bgbilling.server.util.Setup;
import ru.bitel.common.sql.ConnectionSet;
import ru.bitel.frk.client.CmdProtocolClient;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.concurrent.TimeUnit;

public class STNZReport extends GlobalScriptBase {

    private static final Logger logger = Logger.getLogger( STNZReport.class );

    static List kkmList = new ArrayList();

    static {

        Kkm kkm1 = new Kkm();
        kkm1.kkmNum = 1;
        kkm1.ip = "10.10.10.216";
        kkm1.title = " N1";

        kkmList.add(kkm1);

        Kkm kkm2 = new Kkm();
        kkm2.kkmNum = 2;
        kkm2.ip = "10.10.10.97";
        kkm2.title = " N2";

        kkmList.add(kkm2);

        Kkm kkm3 = new Kkm();
        kkm3.kkmNum = 3;
        kkm3.ip = "192.168.200.5";
        kkm3.title = " N3";

        kkmList.add(kkm3);

        Kkm kkm4 = new Kkm();

        kkm4.kkmNum = 4;
        kkm4.ip = "192.168.200.34";
        kkm4.title = " N4";

        kkmList.add(kkm4);

        Kkm kkm5 = new Kkm();

        kkm5.kkmNum = 5;
        kkm5.ip = "192.168.200.66";
        kkm5.title = " N5";

        kkmList.add(kkm5);
    }

   private String[] EMAILS = {"xxxx@xxx.ru"};

    public void printZReport(Setup setup, int kkmNum, String ipAddrkkm, String textMsg, ConnectionSet con) throws IOException, BGException {

        int kkmPass = 30;
        CmdProtocolClient cpc = null;

        try {
            cpc = new CmdProtocolClient(ipAddrkkm,9876 );
            cpc.connect();

            String printServerStatus = cpc.getServerStatus();

            logger.info( "PrintServer Status ip:"+ipAddrkkm + "= " + printServerStatus );

            if( printServerStatus != null ) {
                try
                {
                    CashCheckUtils.ZReport(CashCheckUtils.getPrinter( kkmNum ), kkmPass);
                    print( "CashCheck Autoprint: Успешно напечатан Z-отчет с ККМ № " + String.valueOf(kkmNum) );
                    logger.info("CashCheck Autoprint: Успешно напечатан Z-отчет с ККМ № " + String.valueOf(kkmNum));
                    sendMails(setup,"CashCheck: [ ZReport Success] ", "Успешно напечатан Z-отчет с ККМ № " + String.valueOf(kkmNum) + textMsg);
                }
                catch(BGException e)
                {
                    print( "CashCheck Autoprint: ZReport ERROR: " + e.getMessage() );
                    logger.info( "CashCheck Autoprint: ZReport ERROR: " + e.getMessage() );
                    sendMails( setup,"CashCheck  [ ZReport ERROR ]", "Ошибка печати Z-отчета на KKM № " + String.valueOf(kkmNum) + textMsg );
                }

                try
                {
                    CashCheckUtils.openDay(CashCheckUtils.getPrinter( kkmNum ), kkmPass);
                    logger.info("CashCheck Autoprint: Успешно напечатан чек открытия смены " + String.valueOf(kkmNum));
                    print( "CashCheck Autoprint: Успешно напечатан чек открытия смены " + String.valueOf(kkmNum) );
                    sendMails(setup,"CashCheck: [ Open day Success] ", "Успешно напечатан чек открытия смены с ККМ № " + String.valueOf(kkmNum) + textMsg );
                } catch (BGException e)
                {
                    logger.info( "CashCheck Autoprint: ZReport ERROR: " + e.getMessage() );
                    print( "CashCheck Autoprint: ZReport ERROR: " + e.getMessage() );
                    sendMails( setup,"CashCheck: [ Open day ERROR] ", "Ошибка печати чека открытия смены с ККМ № " + String.valueOf(kkmNum) + textMsg );

                }

            }else {

                logger.info( "Не удалось получить статус сервера печати с ККМ № " + kkmNum + textMsg );
                print( "Не удалось получить статус сервера печати с ККМ № " + kkmNum + textMsg );
                sendMails( setup,"CashCheck: [ ERROR GET STATUS PRINT SERVER ] ", "Ошибка получения статуса сервера печати для ККМ № " + String.valueOf(kkmNum) + textMsg );

            }
        } catch (IOException e) {
            logger.info( "CashCheck: [ Sent email wiht PRINT SERVER ERROR]" + e.getMessage());
            sendMails( setup,"CashCheck: [ Не удалось снять Z-отчет ] ", "Не удалось снять Z-отчет. Ошибка создания сокета для сервера печати ККМ № " + String.valueOf(kkmNum) + textMsg );
            throw new BGException( e.getMessage() );
        } finally {
            try {
                cpc.disconnect();
            } catch ( Exception e ) {

            }

        }
    }

    @Override
    public void execute(Setup setup, ConnectionSet set)
            throws Exception {

        for( Iterator i = kkmList.iterator(); i.hasNext(); ) {
            Thread.sleep(10000);
            Kkm kkm = (Kkm) i.next();
            try {
                logger.info("Попытка снятия отчета с кассы № " + kkm.kkmNum + " IP:" + kkm.ip);
                printZReport(setup, kkm.kkmNum, kkm.ip , kkm.title, set);
            } catch (Exception e) {
                logger.info("[Print Server IP:] " + kkm.ip + " | " + e.toString() );
                e.printStackTrace();
            }

        }

    }

    private void sendMails(Setup setup, String subject, String body)
    {
        MailMsg mailmsg = new MailMsg(setup);
        for(String email : EMAILS)
        {
            try
            {
                mailmsg.sendMessage(email, subject, body);
            }
            catch (Exception e)
            {
                logger.info("[Error send e-mail:] "  +  e.toString() );
            }
        }
    }

}


Если запускать скрипт указывая только ОДНУ ККМ (по очереди) - все работает. Но вот если указать сразу ПЯТЬ аппаратов, то после успешного прохода по ТРЁМ аппаратам возникает ошибка 504

Текст ошибки:
Код:
com.sun.xml.ws.client.ClientTransportException: The server sent HTTP status code 504: Gateway Time-out
   at com.sun.xml.ws.transport.http.client.HttpTransportPipe.checkStatusCode(HttpTransportPipe.java:358)
   at com.sun.xml.ws.transport.http.client.HttpTransportPipe.createResponsePacket(HttpTransportPipe.java:307)
   at com.sun.xml.ws.transport.http.client.HttpTransportPipe.process(HttpTransportPipe.java:265)
   at com.sun.xml.ws.transport.http.client.HttpTransportPipe.processRequest(HttpTransportPipe.java:184)
   at com.sun.xml.ws.transport.DeferredTransportPipe.processRequest(DeferredTransportPipe.java:137)
   at com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.java:641)
   at com.sun.xml.ws.api.pipe.Fiber._doRun(Fiber.java:600)
   at com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:585)
   at com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber.java:482)
   at com.sun.xml.ws.client.Stub.process(Stub.java:323)
   at com.sun.xml.ws.client.sei.SEIStub.doProcess(SEIStub.java:161)
   at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:113)
   at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:93)
   at com.sun.xml.ws.client.sei.SEIStub.invoke(SEIStub.java:144)
   at com.sun.proxy.$Proxy36.run(Unknown Source)
   at ru.bitel.bgbilling.kernel.dynamic.client.DynamicCodeLibraryPanel$16.actionPerformedImpl(DynamicCodeLibraryPanel.java:565)
   at ru.bitel.common.client.AbstractBGUPanel.actionPerformed(AbstractBGUPanel.java:237)
   at ru.bitel.common.client.AbstractBGUPanel$DefaultAction.actionPerformed(AbstractBGUPanel.java:91)
   at ru.bitel.common.client.AbstractBGUPanel.performAction(AbstractBGUPanel.java:541)
   at ru.bitel.common.client.AbstractBGUPanel.performAction(AbstractBGUPanel.java:522)
   at ru.bitel.common.client.AbstractBGUPanel.performAction(AbstractBGUPanel.java:517)
   at ru.bitel.bgbilling.kernel.dynamic.client.DynamicCodeLibraryPanel$8.actionPerformed(DynamicCodeLibraryPanel.java:311)
   at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
   at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
   at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
   at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
   at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
   at java.awt.Component.processMouseEvent(Unknown Source)
   at javax.swing.JComponent.processMouseEvent(Unknown Source)
   at java.awt.Component.processEvent(Unknown Source)
   at java.awt.Container.processEvent(Unknown Source)
   at java.awt.Component.dispatchEventImpl(Unknown Source)
   at java.awt.Container.dispatchEventImpl(Unknown Source)
   at java.awt.Component.dispatchEvent(Unknown Source)
   at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
   at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
   at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
   at java.awt.Container.dispatchEventImpl(Unknown Source)
   at java.awt.Window.dispatchEventImpl(Unknown Source)
   at java.awt.Component.dispatchEvent(Unknown Source)
   at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
   at java.awt.EventQueue.access$500(Unknown Source)
   at java.awt.EventQueue$3.run(Unknown Source)
   at java.awt.EventQueue$3.run(Unknown Source)
   at java.security.AccessController.doPrivileged(Native Method)
   at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
   at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
   at java.awt.EventQueue$4.run(Unknown Source)
   at java.awt.EventQueue$4.run(Unknown Source)
   at java.security.AccessController.doPrivileged(Native Method)
   at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
   at java.awt.EventQueue.dispatchEvent(Unknown Source)
   at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
   at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
   at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
   at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
   at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
   at java.awt.EventDispatchThread.run(Unknown Source)


Можно конечно сделать два скрипта и указывать в одном 3 аппарата в другом 2, но это не совсем красиво.



О программе:
Код:
Информация о версии:

  Клиент: вер. 6.2.849 / 22.12.2016 16:31:48
    os: Windows 10; java: Java HotSpot(TM) Client VM, v.1.8.0_151
  Сервер: вер. 6.2.1149 / 22.12.2016 16:33:23
    os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_77

  assist: вер. 6.2.88 / 09.11.2016 15:23:35
  bill: вер. 6.2.97 / 14.12.2016 14:33:00
  bvcom: вер. 6.2.95 / 14.07.2016 14:11:19
  card: вер. 6.2.39 / 26.05.2016 14:50:45
  dialup: вер. 6.2.315 / 01.03.2016 00:17:59
  email: вер. 6.2.177 / 14.12.2016 14:27:42
  inet: вер. 6.2.704 / 19.12.2016 21:03:04
  ipn: вер. 6.2.262 / 19.12.2016 21:02:58
  mps: вер. 6.2.221 / 04.10.2016 19:16:15
  npay: вер. 6.2.197 / 04.10.2016 19:12:21
  phone: вер. 6.2.287 / 19.12.2016 21:03:24
  rentsoft: вер. 6.2.63 / 04.10.2016 19:16:26
  reports: вер. 6.2.213 / 03.10.2016 16:59:27
  rscm: вер. 6.2.178 / 04.10.2016 19:16:30
  ru.bitel.bgbilling.plugins.bonus: вер. 6.2.122 / 28.11.2016 20:59:09
  ru.bitel.bgbilling.plugins.cashcheck: вер. 6.2.114 / 25.07.2017 14:33:27
    ВНИМАНИЕ: клиентская версия: 6.2.107 / 15.07.2016 13:25:39
  ru.bitel.bgbilling.plugins.crm: вер. 6.2.195 / 04.10.2016 19:16:05
  ru.bitel.bgbilling.plugins.dispatch: вер. 6.2.95 / 14.12.2016 14:33:16
  ru.bitel.bgbilling.plugins.documents: вер. 6.2.176 / 14.12.2016 14:33:16
  ru.bitel.bgbilling.plugins.helpdesk: вер. 6.2.182 / 04.10.2016 19:16:06
  ru.bitel.bgbilling.plugins.organizer: вер. 6.2.72 / 04.10.2016 19:16:19
  sberbank: вер. 6.2.66 / 16.03.2018 00:59:33
  subscription: вер. 6.2.40 / 04.10.2016 19:16:37
  trayinfo: вер. 6.2.170 / 02.02.2016 17:42:09
  tv: вер. 6.2.238 / 30.11.2016 17:54:27
  voiceip: вер. 6.2.191 / 14.12.2016 14:29:33
  wm: вер. 6.2.189 / 04.10.2016 19:16:46
  yamoney: вер. 6.2.58 / 04.10.2016 19:16:49

Окружение:

  Клиент:
    os: Windows 10 x86, 10.0
    java: Java HotSpot(TM) Client VM, v.1.8.0_151
    jre home: C:\Program Files (x86)\Java\jre1.8.0_151
    default tz: 29.12.2018 13:23 MSK +0300 (Europe/Moscow)
    user tz: 29.12.2018 13:23 MSK +0300 (Europe/Moscow)
    locale: ru_RU
  Сервер:
    os: Linux amd64, 4.9.0-3-amd64
    java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_77
    jre home: /opt/java/java-8-oracle/jre
    default tz: 29.12.2018 13:23 MSK +0300 (Europe/Moscow)
    db time: master: 29.12.2018 13:23 MSK
    db charset: connection: cp1251(cp1251_general_ci), database: cp1251(cp1251_general_ci)
    locale: ru_RU
    uptime: Started: 20.12.2018 16:07:23 Uptime: 8 d 21:16:34

Третьи стороны:

  Fugue Icons. Copyright © 2011 Yusuke Kamiyamane. All rights reserved.
    http://p.yusukekamiyamane.com/
  Silk icon set. Copyright © Mark James. All rights reserved.
    http://www.famfamfam.com/lab/icons/silk/

Автор:  dimOn [ 29 дек 2018, 18:08 ]
Заголовок сообщения:  Re: [6.2] HTTP status code 504: Gateway Time-out

но это вам просто клиент же пишет потому что отвалился от сервера - слишком долго снимается отчёт, вот и всё.
по идее код должен до конца выполниться и все отчёты сняться, просто вы это не увидите в клиенте (но в логах сервера всё написано будет).
вы же этот код судя по стеку запускаете тупо через F9, а не из шедулера.

Автор:  dimOn [ 29 дек 2018, 18:10 ]
Заголовок сообщения:  Re: [6.2] HTTP status code 504: Gateway Time-out

почему: у вас в nginx просто слишком малый таймаут на отклик по http стоит, потому долгие операции у вас их клиента все падать будут
как решать: забить или лучше сделать таймаут больше

Автор:  dimOn [ 29 дек 2018, 18:10 ]
Заголовок сообщения:  Re: [6.2] HTTP status code 504: Gateway Time-out

плюс сильно не помешает обновить биллинг, это слишком старый, кешчек у вас от 2016 вообще не работать по идее должен, просто у вас он отдельно новее, чем всё остальное, что тоже делать нельзя

Страница 1 из 1 Часовой пояс: UTC + 5 часов [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/