【问题标题】:Telegram Bot (new Update in new Thread) with telegrambots-spring-boot-starterTelegram Bot(新线程中的新更新)与 telegrambots-spring-boot-starter
【发布时间】:2025-12-26 20:50:07
【问题描述】:


我写了一个 LongPolling 机器人,它一次可以使用一个更新。
我希望它通过多线程处理 2 个或更多更新。
这里的例子我的意思。我在 Performance Optimizations (Python Telegram Bot) 文章中找到了这个示例。

示例:您正在运行 Echobot 和两个用户(用户 A 和用户 B) 同时向机器人发送消息。也许用户 A 有点 更快,所以他的请求首先到达,以 Update 对象的形式 (更新 A)。调度程序检查更新并决定它应该是 由带有名为 echo 的回调函数的处理程序处理。在 同时,用户 B 的更新到达(更新 B)。但是调度员 没有用 Update A 完成。它用 Update 调用 echo 函数 A,它向用户 A 发送回复。发送回复需要一些时间(请参阅 服务器位置),并且更新 B 在此期间保持不变。 只有在更新 A 的 echo 函数完成后,Dispatcher 对更新 B 重复相同的过程。

在本文中说要解决此类问题,python 电报库提供了一种在单独的线程中显式运行回调函数(或任何其他函数)的方法。
有人能解释一下我如何用java来做吗???
这是我的部分代码:


机器人

@Component   
public class SenderBot extends TelegramLongPollingBot {

private static final String BOT_TOKEN = "token";
private static final String BOT_NAME = "bot_name";

static {
    ApiContextInitializer.init();
}

@Override
public void onUpdateReceived(Update update) {

    if (update.hasMessage()) {
    ...
    some code
    ...
    }
}
}



SpringBootApp

@SpringBootApplication
public class SenderBotApplication {
public static void main(String[] args) {
    SpringApplication.run(SenderBot.class, args);
    }
}

如果有人知道没有多线程的另一种方法 - 告诉我怎么做。
我将非常感谢任何帮助和示例。

【问题讨论】:

    标签: java concurrency telegram-bot


    【解决方案1】:

    我找到了解决办法。

    @Override
        public void onUpdateReceived(Update update) {
    
            new Thread(new Runnable() {
                @Override
                public void run() {
                    if (update.hasMessage()) {
                    // code goes here.
                    }
                  }
           }).start
    }
    

    此代码同时适用于许多用户。 但我不知道这个解决方案是否正确......

    【讨论】: