【问题标题】:Java Check if a method is still runningJava 检查方法是否仍在运行
【发布时间】:2021-09-06 09:50:39
【问题描述】:

我有问题。我在我的项目中使用 Binance API。使用此 API,我打开烛台流以接收不同烛台时段的最新更新。烛台流方法位于如下所示的类中:

public class CandlestickStream {

    private String market;
    private String coin;
    private String period;

    public CandlestickStream(String market, String coin, String period) throws SecurityException, IOException {
        this.market = market;
        this.coin = coin;
        this.period = period;

        startCandlestickEventStreaming();
      }


    /**
     * Starting a stream to get the current candlestick data of the given symbol and period
     * @param symbol The symbol you want the data from
     * @param interval The period of the candlestick
     * @throws IOException
     * @throws SecurityException
     */
    public void startCandlestickEventStreaming() throws SecurityException, IOException {

        BinanceApiWebSocketClient client = BinanceApiClientFactory.newInstance().newWebSocketClient();

        String symbol = createSymbolString(market, coin);
        CandlestickInterval interval = periodToInterval(period);

        client.onCandlestickEvent(symbol, interval, response -> {

            System.out.println(response);

        });

    }

}

使用以下代码开始流:

// Loop over every market-coin-period combination and start the firstrun and stream
for (String market : markets) {
    for (String coin : coins) {
        for (String period : periods) {

            // Run candlestick stream to monitor if it's still running
            new CandlestickStream(market, coin, period);             

        }
    }
}

但我注意到 binance 可能会重新启动服务器,这会导致流功能停止,然后我将不会收到任何更新而不会出现任何错误。所以我需要一种方法来检查该功能是否仍在运行。如果没有,我需要重新启动它。控制进程以检查它是否仍在运行,如果没有,则重新启动类的最佳方法是什么?

【问题讨论】:

    标签: java function process binance


    【解决方案1】:

    我会说当您打开流时创建一个数据库条目(状态 = INIT_READ)。一旦完成更新状态(DONE_READ)。批处理作业的工作方式。

    您可以创建一个调度程序来在每 X 时间后检查该条目的状态。

    通过服务器启动时的状态检查,您可以决定您需要做什么。

    【讨论】:

    • 好的,我来看看。但只是为了确保您了解我需要做什么......流运行 24/7,我只需要确保它仍在运行。如果没有,我需要重新启动流。流可以结束,因为币安服务器正在重新启动或服务器失去连接。那么这是最好的方法吗?
    • 我想说的是,流永远不会完成,所以我认为使用状态不起作用,或者我理解错了吗?
    • 哦,在这种情况下,我会说你应该用 try-finally 包围你的电话。所以当方法退出时,它最终会进入内部。在那里你可以做你的操作来召回/重新启动它。
    • 我应该用 try-finally 包围什么?整个类创建:new CandlestickStream(market, coin, period); 或类内部:startCandlestickEventStreaming();?
    • 在我看来 new CandlestickStream(market, coin, period);应该管用。但你可以根据自己的要求试一试。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多