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

问题描述 投票:0回答:1

我正在尝试在 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方法放入队列的方法,因为我现在没有想法了

c# asp.net .net asp.net-core rabbitmq
1个回答
0
投票

这应该向

hello
队列发布一条消息。如果您希望频繁执行
PostMessage
,则可以使用长时间运行的
connection
channel
对象,而不是在每次方法调用时创建新对象。如果频繁调用此方法,您还可以进行其他一些更改,例如在另一个线程上执行 SMS 和 RabbitMQ 工作。

© www.soinside.com 2019 - 2024. All rights reserved.