如何在asp.net核心中向Rabbitmq队列发送方法

时间:2018-06-19 07:23:18

标签: c# asp.net .net asp.net-core rabbitmq

我试图在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的提示或者可能是另外一种方法将这三种等待方法放入队列中,因为我现在没有想法

1 个答案:

答案 0 :(得分:0)

RabbitMQ团队监视the rabbitmq-users mailing list,并且有时仅在StackOverflow上回答问题。


那应该将消息发布到hello队列中。如果您希望PostMessage被频繁执行,则可以使用长时间运行的connectionchannel对象,而不是在每个方法调用中都创建新的对象。如果经常调用此方法,您还可以进行其他一些更改,例如在另一个线程上执行SMS和RabbitMQ。