go

时间:2018-03-02 16:56:14

标签: multithreading go concurrency goroutine mux

我正在编写这个API,它是slack bot应用程序的后端,将被许多用户使用。在我的api中的一个API端点中,我正在调用外部API来获取一些数据,因此我可以在我的API中按摩它以将其发送给BOT /用户。但我正在进行的外部API调用非常昂贵(约5 / ~10秒)。我注意到,当我在同一时间点击我的API端点两次或更多次时有时我没有得到任何数据。只有一个电话成功。有什么办法可以解决这个问题吗?我一直在调查工作人员队列,但不确定它是否过度杀伤。

我正在使用多路复用器进行路由。

1 个答案:

答案 0 :(得分:1)

如果您希望比外部API更快地处理请求,则需要将出站呼叫与传入请求分开并进行某种缓存。例如,您可以:

  • 运行调用外部API的工作线并将结果存储在缓存中
  • 您是否要求从缓存中提取处理程序
  • 如果数据是最近的,请将其返回
  • 如果数据太旧,请等待刷新缓存,然后使用新数据

如果这是一个全天候忙碌的服务,那么工作人员只需按照重复的时间表刷新缓存,无论需要什么频率;或者,您可以让请求处理程序向缓存工作队列一条消息,指示需要刷新缓存,这样当您没有收到请求时,它就不会继续访问外部API。