是否可以将请求一起批处理,以便安全地完成。
例如:
尝试保存所有买/卖订单,在10分钟内将每个用户订单分组。这意味着您需要存储在每个用户使用的内存中。
因此,您在服务中保存了订单构建器的哈希映射。我认为由于地图,这不会是线程安全的。
一个简单的例子(不工作的java代码),只是一个粗略的例子
@Service
public class OrderService
{
Map<User,OrderRequestBuilder> builders = new HashMap<User,OrderRequestBuilder>()
Map<User,Timer> timers = new HashMap<User,Timer>(();
public void addOrder( User user , BuyOrder order)
if (!builders.containsKey(user)){
builders.put(user, new OrderRequestBuilder().withUser(user);
}
OrderRequestBuilder builder = builders.get( user );
builder.withAddOrder( order);
builders.put(builder);
if (!timers.containsKey(user){
Timer t = new Timer();
t.schedule( new TimerTask(){
public void run(){
sendOrder(user)
}},600000
}
}
// Runs at a fixed time for a specific account, scheduled
public void sendOrder(User user){
timers.remove(user);
sendService.send( builders.remove(user).build() );
builders.put(user, new OrderRequestBuilder().withUser(user);
}
public void sellOrder( User user , SellOrder order)
if (!builders.containsKey(user)){
builders.put(user, new OrderRequestBuilder().withUser(user);
}
OrderRequestBuilder builder = builders.get( user );
builder.withSellOrder( order);
builders.put(builder);
if (!timers.containsKey(user){
Timer t = new Timer();
t.schedule( new TimerTask(){
public void run(){
sendOrder(user)
}},600000
}
}
}