gpt4 book ai didi

java - 如何在 Java App Engine 中实现原子整数?

转载 作者:行者123 更新时间:2023-12-02 04:50:55 24 4
gpt4 key购买 nike

我正在尝试为我的应用程序推出自己的短信验证系统。我不想开始为一项服务付费,然后让他们抬高我的价格(Urban Airship 对我这样做是为了推送通知:吸取教训)。在开发和 Beta 测试期间,我一直在使用 Twilio 进行非常基本的设置:1 个电话号码。它运行了一年多,但现在由于某种原因,消息并不总是能够传递。无论如何,我需要创建一个更好的生产系统。所以我考虑了以下规范:

  1. 每分钟发送 600 条短信
  2. 零失误
  3. 省钱

现在 my Twilio phone number can send one SMS per second ;这意味着我最多可以处理每分钟 60 个满意的用户。那么如何才能获得每分钟 600 个满意的用户呢?

所以显而易见的解决方案是使用 10 个电话号码。但我该如何实现该系统呢?我的服务器是App Engine、DataStore、Java。假设我从 Twilio 购买了 10 个电话号码(当然越少越好)。如何实现该数组以便它可以处理来自用户的并发调用?以下内容就足够了吗?

public static final String[] phoneBank = {“1234567890”,”2345678901”,”3456789012”,”4567890123”,…}; 
public static volatile nextIndex;

public void sendSMSUsingTwilio(String message, String userPhone){
nextIndex = (nextIndex+1)%phoneBank.length;
String toPhone = phoneBank[nextIndex];

// boilerplate for sending sms with twilio goes here
//…
}

现在想象一下 1000 个用户同时调用这个函数。 nextIndex 会从 0,1,2…9,0,1…9,0,… 依次运行,直到发送所有请求为止?

所以这确实是一个并发问题。 Java AppEngine 上的并发问题将如何解决?会有交错吗?遇到瓶颈?我希望速度快、预算低:至少每分钟 600 个。所以我绝对不希望代码本身的同步浪费宝贵的时间。那么,如何最好地同步调用以增加 nextIndex 以便以定期方式平等地调用每个电话号码?同样,这是针对 Google App Engine 的。

最佳答案

您需要使用Task API 。每条消息都是一个新任务,您可以使用循环或随机分配来分配电话号码。任务完成后,App Engine 将自动拉取并执行下一个任务。您可以配置所需的吞吐率(例如每秒 10 个),App Engine 将为您管理所需的容量。

您可以尝试自己实现类似的东西,但这比您想象的要困难得多 - 您必须处理并发、重试、实例关闭、内存限制等。任务 API 会为您完成所有这些工作。

关于java - 如何在 Java App Engine 中实现原子整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29258003/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com