net8.0一键创建支持(RabbitMQ)
Necore项目生成器 - 在线创建Necore模板项目 | 一键下载
RabbitMQController.cs
using Microsoft.AspNetCore.Http;using Microsoft.AspNetCore.Mvc;using RabbitMQ.Client;using RabbitMQ.Client.Events;using System.Text;using System.Threading.Tasks;using UnT.Template.Application.Responses;using UnT.Template.Domain;namespace UnT.Template.Controllers{ [Route(\"api/rabbimqs\")] [ApiController] public class RabbitMQController : ControllerBase { private readonly ConnectionFactory _connectionFactory; public RabbitMQController(ConnectionFactory connectionFactory) { _connectionFactory = connectionFactory; } [HttpPost(\"publish\")] [Produces(\"application/json\")] [ProducesResponseType(typeof(ApiResponse), StatusCodes.Status200OK)] public async Task Insert() { try { using (var connection = await _connectionFactory.CreateConnectionAsync()) using (var channel = await connection.CreateChannelAsync()) { await channel.QueueDeclareAsync(queue: \"unt_queue\", durable: true, exclusive: false, autoDelete: false, arguments: null); await channel.BasicPublishAsync(exchange: \"\", routingKey: \"unt_queue\", mandatory: false, body: System.Text.Encoding.UTF8.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(new Pro_Product { Name = DateTime.Now.ToFileTime().ToString() }))); } return Ok(new ApiResponse { Success = true, Data = true }); } catch (Exception ex) { return Ok(new ApiResponse { Success = false, Message = ex.Message, Data = false }); } } [HttpPost(\"consume\")] [Produces(\"application/json\")] [ProducesResponseType(typeof(ApiResponse), StatusCodes.Status200OK)] public async Task Consume() { try { Task.Run(() => { var connection = _connectionFactory.CreateConnectionAsync().GetAwaiter().GetResult(); var channel = connection.CreateChannelAsync().GetAwaiter().GetResult(); { // 创建消费者 var consumer = new AsyncEventingBasicConsumer(channel); channel.BasicConsumeAsync(queue: \"unt_queue\", autoAck: false, consumer: consumer).GetAwaiter().GetResult(); // 注册接收事件处理程序 consumer.ReceivedAsync += async (model, ea) => { var body = ea.Body.ToArray(); var message = Encoding.UTF8.GetString(body); Console.WriteLine($\" [x] Received {message}\"); // 手动确认消息(如果autoAck=false) channel.BasicAckAsync(ea.DeliveryTag, false).ConfigureAwait(false).GetAwaiter().GetResult(); }; } }); await Task.Delay(TimeSpan.FromSeconds(5)); return Ok(new ApiResponse { Success = true, Data = true }); } catch (Exception ex) { return Ok(new ApiResponse { Success = false, Message = ex.Message, Data = false }); } } }}