我创建了使用AT 命令和GSM调制解调器进行通信的信使,但是如果许多用户一次发送和接收消息,那么AT 命令将重叠,这将导致很多问题,所以我认为我的 Web 应用程序需要某种FIFO 队列来存储发送/接收方法执行。
假设我有HttpPost方法,该方法是通过按 网页上的SendMessage按钮执行的,此方法将消息保存到数据库并执行SendSms和ReceiveSms方法,这些方法使用AT 命令执行操作,如下面的代码所示。
[HttpPost(Name = "add-message")]
public async Task<IActionResult> PostMessage([FromBody] MessengerViewModel messengerViewModel)
{
AtSmsSender smsSender = new AtSmsSender();
InnerAtSmsReceiver innerAtSmsReceiver = new InnerAtSmsReceiver(_receivedMessagesService);
await smsSender.SendSms(messengerViewModel.PhoneNr, messengerViewModel.MessageBody);
await innerAtSmsReceiver.ReceiveSms();
//Logic of saving message using service
}
Run Code Online (Sandbox Code Playgroud)
我正在搜索队列示例,但我发现的主要是消息队列,它不符合我的想法。我如何将这个Http 方法或其中的方法排队,以便它们在一些延迟后堆叠和执行?
第一次遇到这个东西,如果我的问题陈述得太糟糕,那么抱歉。
我有一个带有方法的类,它是事件,它获取我需要存储到数据库的数据。
public class DataParser
{
SmsService smsService = new SmsService(..require context...);
public void ReceiveSms()
{
//ParserLogic
smsService.SaveMessage(...Values...);
}
}
Run Code Online (Sandbox Code Playgroud)
由于服务在上下文的帮助下保存数据,我需要传递它并在构造函数中初始化。在我这样做之后,当我创建解析器对象以在启动时运行时,需要在那里传递上下文。
public class Startup
{
DataParser data = new DataParser(...requires db context...)
public void ConfigureServices(IServiceCollection services)
{
//Opens port for runtime
InnerComPortSettings.OpenPort();
//Runtime sms receiver
data.ReceiveSms();
}
}
Run Code Online (Sandbox Code Playgroud)
那么如何正确地将数据保存到数据库呢?