我正在尝试在 HttpPost 方法内创建队列,因此当我使用它时,内部的函数将进入队列并在一段时间后执行。
我尝试做的是:
[HttpPost(Name = "add-message")]
public async Task<IActionResult> PostMessage([FromBody] MessengerViewModel messengerViewModel)
{
AtSmsSender smsSender = new AtSmsSender();
InnerAtSmsReceiver innerAtSmsReceiver = new InnerAtSmsReceiver(_asynchMessagesService);
DateTime now = DateTime.Now;
var currentUserId = _httpContextAccessor.HttpContext.User.FindFirst(ClaimTypes.NameIdentifier).Value;
var factory = new ConnectionFactory() { HostName = "localhost" };
using (var connection = factory.CreateConnection())
using (var channel = connection.CreateModel())
{
channel.QueueDeclare(queue: "hello",
durable: false,
exclusive: false,
autoDelete: false,
arguments: null);
await smsSender.SendSms(messengerViewModel.PhoneNr, messengerViewModel.MessageBody);
await innerAtSmsReceiver.ReceiveSms();
await _asynchMessagesService.SaveSentMessage(currentUserId, messengerViewModel.ContactId,
messengerViewModel.MessageBody, now,
true, messengerViewModel.State);
channel.BasicPublish(
exchange: "",
routingKey: "hello",
basicProperties: null);
}
return Ok();
}
我不知道使用 RabbitMQ 队列是否正确。我想获得一些有关rabbitmq的提示,或者也许是另一种将这三个await方法放入队列的方法,因为我现在没有想法了
这应该向
hello
队列发布一条消息。如果您希望频繁执行 PostMessage
,则可以使用长时间运行的 connection
和 channel
对象,而不是在每次方法调用时创建新对象。如果频繁调用此方法,您还可以进行其他一些更改,例如在另一个线程上执行 SMS 和 RabbitMQ 工作。