我试图在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的提示或者可能是另外一种方法将这三种等待方法放入队列中,因为我现在没有想法
答案 0 :(得分:0)
RabbitMQ团队监视the rabbitmq-users
mailing list,并且有时仅在StackOverflow上回答问题。
那应该将消息发布到hello
队列中。如果您希望PostMessage
被频繁执行,则可以使用长时间运行的connection
和channel
对象,而不是在每个方法调用中都创建新的对象。如果经常调用此方法,您还可以进行其他一些更改,例如在另一个线程上执行SMS和RabbitMQ。