diff --git a/Infrastructure/CloudSdk/mqtt/MqttClientManager.cs b/Infrastructure/CloudSdk/mqtt/MqttClientManager.cs index 82a8773..76d7ef4 100644 --- a/Infrastructure/CloudSdk/mqtt/MqttClientManager.cs +++ b/Infrastructure/CloudSdk/mqtt/MqttClientManager.cs @@ -226,7 +226,7 @@ public class MqttClientManager var result = await _outBoundClient.PublishAsync(mqttMsg, CancellationToken.None); if (result.IsSuccess) { - Console.WriteLine($"{topic} {message}发布成功"); + //Console.WriteLine($"{topic} {message}发布成功"); } else { diff --git a/OpenAuth.App/ServiceApp/Algo/DaHuaAiApp.cs b/OpenAuth.App/ServiceApp/Algo/DaHuaAiApp.cs new file mode 100644 index 0000000..757c6cd --- /dev/null +++ b/OpenAuth.App/ServiceApp/Algo/DaHuaAiApp.cs @@ -0,0 +1,261 @@ +using Infrastructure; +using Newtonsoft.Json; +using OpenAuth.App.BaseApp.Base; +using OpenAuth.App.Interface; +using OpenAuth.App.ServiceApp.Algo.Request; +using OpenAuth.App.ServiceApp.Algo.Response; +using OpenAuth.Repository; +using OpenAuth.Repository.Domain; +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace OpenAuth.App.ServiceApp.Algo +{ + + public class DaHuaAiApp : SqlSugarBaseApp + { + public DaHuaAiApp(ISugarUnitOfWork unitWork, + ISimpleClient repository, IAuth auth) : base(unitWork, repository, auth) + { + } + + #region 大华算法 + //分析两次航线图片 + public async Task>> BehaviorAlarm(string firstId, string secondId) + { + using (var db = UnitWork.CreateContext()) + { + var imageList1 = await db.LasaMediaFile.AsQueryable().Where(r => r.TaskId == firstId && r.AbsoluteAltitude != 0 && r.AbsoluteAltitude != null).ToListAsync(); + var imageList2 = await db.LasaMediaFile.AsQueryable().Where(r => r.TaskId == secondId && r.AbsoluteAltitude != 0 && r.AbsoluteAltitude != null).ToListAsync(); + //var imageList1 = await db.LasaMediaFile.AsQueryable().Where(r => r.Id == firstId && r.AbsoluteAltitude != 0 && r.AbsoluteAltitude != null).ToListAsync(); + //var imageList2 = await db.LasaMediaFile.AsQueryable().Where(r => r.Id == secondId && r.AbsoluteAltitude != 0 && r.AbsoluteAltitude != null).ToListAsync(); + List dataList = new List(); + for (int i = 0; i < imageList1.Count; i++) + { + dataList.Add(new + { + @event = "event.capturePic", + uid = "1", + channelCode = "sdhc04", + recordId = "kQUXlb1Y8oDgCpZSo7l2yG175617335006157587", + sourceId = "kQUXlb1Y8oDgCpZSo7l2yG175617335006157587", + taskSource = 1, + taskId = "8ab0e1e213234a848e20d0d335559786", + capTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(), + taskTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(), + imageInfo = new + { + imgSize = 1667235, + imgWidth = 4032, + imgHeight = 3024 + }, + imageInfoList = new[] + { + new { + imgUrl = "http://175.27.168.120:6013/test/"+imageList1[i].ObjectKey, + imgSize = imageList1[i].Size, + imgWidth = imageList1[i].Width, + imgHeight = imageList1[i].Height, + imgType = 0, + longitude = imageList1[i].Lng, + absAltitude = imageList1[i].AbsoluteAltitude, + latitude = imageList1[i].Lat, + zoom = imageList1[i].DigitalZoomRatio, + yaw = imageList1[i].GimbalYawDegree, + pitch = imageList1[i].GimbalPitchDegree, + roll = imageList1[i].GimbalRollDegree, + focalLength = imageList1[i].FocalLength + }, + new { + imgUrl = "http://175.27.168.120:6013/test/"+imageList2[i].ObjectKey, + imgSize = imageList2[i].Size, + imgWidth = imageList2[i].Width, + imgHeight = imageList2[i].Height, + imgType = 1, + longitude =imageList2[i].Lng, + absAltitude = imageList2[i].AbsoluteAltitude,//拍摄绝对高度 + latitude = imageList2[i].Lat, + zoom = imageList2[i].DigitalZoomRatio,//放大倍率 + yaw =imageList2[i].GimbalYawDegree,//偏航角? + pitch = imageList2[i].GimbalPitchDegree,//滚角? + roll = imageList2[i].GimbalRollDegree, + focalLength = imageList2[i].FocalLength//焦距 + } + } + }); + } + return new Response> + { + Result = dataList, + Message = "获取数据成功" + }; + } + } + public async Task> AddDaHuaImg(string info) + { + using (var db = UnitWork.CreateContext()) + { + var data = JsonConvert.DeserializeObject(info); + LasaAiAchievement lasaAiAchievement = new LasaAiAchievement(); + lasaAiAchievement.Id = Guid.NewGuid().ToString(); + lasaAiAchievement.Title = "疑似耕地破坏"; + lasaAiAchievement.CreateTime = DateTime.Now; + lasaAiAchievement.AiModel = "DaHuaAi"; + var imageList = data.imageInfoList; + foreach (var item in imageList) + { + //插入详情 + LasaAiAchievementDetail lasaAiAchievementDetail = new LasaAiAchievementDetail() + { + Id = Guid.NewGuid().ToString(), + Image = item.imgUrl, + AiAchievementId = lasaAiAchievement.Id + }; + lasaAiAchievement.Lat = item.latitude; + lasaAiAchievement.Lng = item.longitude; + await db.LasaAiAchievementDetail.InsertAsync(lasaAiAchievementDetail); + } + await db.LasaAiAchievement.InsertAsync(lasaAiAchievement); + if (db.Commit()) + return new Response + { + Result = true, + Message = "添加成功" + }; + else + return new Response + { + Result = false, + Message = "添加失败" + }; + } + } + + #endregion + + + #region 本地模型 + public async Task> AddImgOld(string taskid, string path, string tag) + { + using (var db = UnitWork.CreateContext()) + { + var info = await db.LasaAiAchievement.GetFirstAsync(r => r.TaskId == taskid); + if (info == null) + { + LasaAiAchievement lasaAiAchievement = new LasaAiAchievement(); + lasaAiAchievement.Id = Guid.NewGuid().ToString(); + var tags = JsonConvert.DeserializeObject>(tag); + foreach (var item in tags) + { + if (item.class_id == 1 || item.class_id == 2 || item.class_id == 3 || item.class_id == 5 || item.class_id == 6 || item.class_id == 6) + { + lasaAiAchievement.Title = "疑似车辆入侵"; + } + } + lasaAiAchievement.CreateTime = DateTime.Now; + lasaAiAchievement.TaskId = taskid; + lasaAiAchievement.AiModel = "yolov8x"; + await db.LasaAiAchievement.InsertAsync(lasaAiAchievement); + //插入详情 + LasaAiAchievementDetail lasaAiAchievementDetail = new LasaAiAchievementDetail() + { + Id = Guid.NewGuid().ToString(), + Image = "http://175.27.168.120:6013/test/" + path, + AiAchievementId = lasaAiAchievement.Id + }; + await db.LasaAiAchievementDetail.InsertAsync(lasaAiAchievementDetail); + } + else + { + //插入详情 + LasaAiAchievementDetail lasaAiAchievementDetail = new LasaAiAchievementDetail() + { + Id = Guid.NewGuid().ToString(), + Image = path, + AiAchievementId = info.Id + }; + await db.LasaAiAchievementDetail.InsertAsync(lasaAiAchievementDetail); + } + if (db.Commit()) + return new Response + { + Result = true, + Message = "添加成功" + }; + else + return new Response + { + Result = false, + Message = "添加失败" + }; + } + } + public async Task> AddImg(string taskid, string path, List tag) + { + using (var db = UnitWork.CreateContext()) + { + foreach (var item in tag) + { + var info = await db.LasaAiAchievement.GetFirstAsync(r => r.TaskId == taskid && r.Tag == item.class_id.ToString()); + if (info == null) + { + LasaAiAchievement lasaAiAchievement = new LasaAiAchievement(); + lasaAiAchievement.Id = Guid.NewGuid().ToString(); + lasaAiAchievement.CreateTime = DateTime.Now; + lasaAiAchievement.TaskId = taskid; + lasaAiAchievement.AiModel = "yolov8x"; + lasaAiAchievement.Tag = item.class_id.ToString(); + if (item.class_id == 1 || item.class_id == 2 || item.class_id == 3 || item.class_id == 5 || item.class_id == 6 || item.class_id == 7) + { + lasaAiAchievement.Title = "疑似车辆入侵"; + } + else if (item.class_id == 0) + { + lasaAiAchievement.Title = "疑似火情报警(测试,切勿当真)"; + } + await db.LasaAiAchievement.InsertAsync(lasaAiAchievement); + //插入详情 + LasaAiAchievementDetail lasaAiAchievementDetail = new LasaAiAchievementDetail() + { + Id = Guid.NewGuid().ToString(), + Image = path, + AiAchievementId = lasaAiAchievement.Id + }; + await db.LasaAiAchievementDetail.InsertAsync(lasaAiAchievementDetail); + } + else + { + //插入详情 + LasaAiAchievementDetail lasaAiAchievementDetail = new LasaAiAchievementDetail() + { + Id = Guid.NewGuid().ToString(), + Image = path, + AiAchievementId = info.Id + }; + await db.LasaAiAchievementDetail.InsertAsync(lasaAiAchievementDetail); + } + + } + if (db.Commit()) + return new Response + { + Result = true, + Message = "添加成功" + }; + else + return new Response + { + Result = false, + Message = "添加失败" + }; + } + } + #endregion + + + } +} diff --git a/OpenAuth.App/ServiceApp/Algo/Request/AiImgReq.cs b/OpenAuth.App/ServiceApp/Algo/Request/AiImgReq.cs new file mode 100644 index 0000000..1108bc0 --- /dev/null +++ b/OpenAuth.App/ServiceApp/Algo/Request/AiImgReq.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace OpenAuth.App.ServiceApp.Algo.Request +{ + public class AiImgReq + { + public string taskid; + public string path; + public List tag; + } + public class TagItem + { + public int class_id { get; set; } + public string class_name { get; set; } + public double confidence { get; set; } + public List box { get; set; } + } +} diff --git a/OpenAuth.App/ServiceApp/Algo/Response/DaHuaAiResp.cs b/OpenAuth.App/ServiceApp/Algo/Response/DaHuaAiResp.cs new file mode 100644 index 0000000..c0005f5 --- /dev/null +++ b/OpenAuth.App/ServiceApp/Algo/Response/DaHuaAiResp.cs @@ -0,0 +1,103 @@ +using DocumentFormat.OpenXml.EMMA; +using SixLabors.ImageSharp; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace OpenAuth.App.ServiceApp.Algo.Response +{ + public class DaHuaAiResp + { + public string alarmAction { get; set; } + public string alarmName { get; set; } + public double alarmTime { get; set; } + public string alarmType { get; set; } + public string algoPkgId { get; set; } + public int algorithmType { get; set; } + public long capTime { get; set; } + public string channelCode { get; set; } + public string channelId { get; set; } + public string classType { get; set; } + public int dataSource { get; set; } + public string deviceCode { get; set; } + public string deviceId { get; set; } + public string @event { get; set; } + public string eventId { get; set; } + public string extRecordId { get; set; } + public ImageInfo imageInfo { get; set; } + public List imageInfoList { get; set; } + public List imgList { get; set; } + public Info info { get; set; } + public string paasId { get; set; } + public string recordId { get; set; } + public int ruleId { get; set; } + public string saasExtParam { get; set; } + public string saasTaskId { get; set; } + public string sourceId { get; set; } + public int taskId { get; set; } + public int taskSource { get; set; } + public long taskTime { get; set; } + public double traceServiceInputTime { get; set; } + public string uid { get; set; } + public string userChannelCode { get; set; } + public string userDeviceCode { get; set; } + } + public class ImageInfo + { + public int imgHeight { get; set; } + public int imgSize { get; set; } + public int imgWidth { get; set; } + } + + public class ImageInfoList + { + public double absAltitude { get; set; } + public int focalLength { get; set; } + public int imgHeight { get; set; } + public int imgSize { get; set; } + public int imgType { get; set; } + public string imgUrl { get; set; } + public int imgWidth { get; set; } + public double latitude { get; set; } + public double longitude { get; set; } + public double pitch { get; set; } + public int roll { get; set; } + public double yaw { get; set; } + public int zoom { get; set; } + } + + public class ImgList + { + public double capTime { get; set; } + public int imgHeight { get; set; } + public int imgSize { get; set; } + public int imgType { get; set; } + public string imgUrl { get; set; } + public int imgWidth { get; set; } + public List objectRect { get; set; } + } + + public class ObjectRect + { + public int objBottom { get; set; } + public int objLeft { get; set; } + public int objRight { get; set; } + public int objTop { get; set; } + } + + public class Info + { + public List> detectRegion { get; set; } + public string name { get; set; } + public List objectGPS { get; set; } + public string plateNum { get; set; } + } + + public class ObjectGPS + { + public double latitude { get; set; } + public double longitude { get; set; } + } +} diff --git a/OpenAuth.App/ServiceApp/Subscribe/ConfigSubscribe.cs b/OpenAuth.App/ServiceApp/Subscribe/ConfigSubscribe.cs index 165a1b5..223a823 100644 --- a/OpenAuth.App/ServiceApp/Subscribe/ConfigSubscribe.cs +++ b/OpenAuth.App/ServiceApp/Subscribe/ConfigSubscribe.cs @@ -98,7 +98,7 @@ public class ConfigSubscribe : IJob var result = JsonConvert.DeserializeObject>(message); var method = result.method; var data = result.data; - _logger.LogInformation($"主题:{topic}\n消息:{message}"); + //_logger.LogInformation($"主题:{topic}\n消息:{message}"); long code = 0; switch (tempStr) { @@ -643,7 +643,7 @@ public class ConfigSubscribe : IJob JsonConvert.SerializeObject(fileUploadCallbackEventReply)); } - Console.WriteLine($"航线进度:{message}"); + //Console.WriteLine($"航线进度:{message}"); break; } default: diff --git a/OpenAuth.Repository/Domain/LasaAiAchievement.cs b/OpenAuth.Repository/Domain/LasaAiAchievement.cs index 153880e..a82df26 100644 --- a/OpenAuth.Repository/Domain/LasaAiAchievement.cs +++ b/OpenAuth.Repository/Domain/LasaAiAchievement.cs @@ -31,6 +31,10 @@ public class LasaAiAchievement [SugarColumn(ColumnName = "AiModel")] public string AiModel { get; set; } + [SugarColumn(ColumnName = "TaskId")] + public string TaskId { get; set; } + [SugarColumn(ColumnName = "Tag")] + public string Tag { get; set; } [SugarColumn(IsIgnore = true)] public List AiAchievementDetailList { get; set; } } \ No newline at end of file diff --git a/OpenAuth.Repository/SugarDbContext.cs b/OpenAuth.Repository/SugarDbContext.cs index e211ad7..6a237af 100644 --- a/OpenAuth.Repository/SugarDbContext.cs +++ b/OpenAuth.Repository/SugarDbContext.cs @@ -84,6 +84,8 @@ namespace OpenAuth.Repository public SugarRepositiry LasaMediaFile { get; set; } public SugarRepositiry LasaAlgorithmsRepository { get; set; } public SugarRepositiry LasaModelLabel { get; set; } + public SugarRepositiry LasaAiAchievement { get; set; } + public SugarRepositiry LasaAiAchievementDetail { get; set; } public SugarRepositiry DbfineInfo { get; set; } public SugarRepositiry SysOpenJob { get; set; } diff --git a/OpenAuth.WebApi/Controllers/ServiceControllers/DaHuaAiController.cs b/OpenAuth.WebApi/Controllers/ServiceControllers/DaHuaAiController.cs index 2dd7475..04c503c 100644 --- a/OpenAuth.WebApi/Controllers/ServiceControllers/DaHuaAiController.cs +++ b/OpenAuth.WebApi/Controllers/ServiceControllers/DaHuaAiController.cs @@ -1,11 +1,13 @@ -using System.Text; -using Infrastructure; +using Infrastructure; using Infrastructure.Helpers; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Newtonsoft.Json; +using OpenAuth.App.ServiceApp.Algo; +using OpenAuth.App.ServiceApp.Algo.Request; using OpenAuth.App.ServiceApp.Request; using OpenAuth.WebApi.Model.RabbitMQService; +using System.Text; namespace OpenAuth.WebApi.Controllers.ServiceControllers { @@ -20,9 +22,11 @@ namespace OpenAuth.WebApi.Controllers.ServiceControllers private readonly string sk = "cf83a12caa155b994eb34fa9"; private readonly string baseUrl = "https://123.132.248.154:6405"; private readonly RabbitMqListenerService _listener; - public DaHuaAiController(RabbitMqListenerService listener) + private readonly DaHuaAiApp _app; + public DaHuaAiController(RabbitMqListenerService listener, DaHuaAiApp app) { _listener = listener; + _app = app; } private async Task> PostJsonAsync(string path, object body) { @@ -213,5 +217,40 @@ namespace OpenAuth.WebApi.Controllers.ServiceControllers { return PostJsonAsync($"/processing/inner/play/channel/{id}?streamType={streamType}&type={type}", new { }); } + /// + /// 大华数据分析 + /// + /// + /// + [HttpPost] + [AllowAnonymous] + public async void BehaviorAlarm(string firstId, string secondId) + { + var mq = await RabbitMqSender.CreateAsync("123.132.248.154", 9103, "DHCloudg1", "Cloud0#4fCraQrm"); + var dataList = await _app.BehaviorAlarm(firstId, secondId); + foreach (var data in dataList.Result) + { + await mq.SendAsync("event.capturePic.1.sdhc04", JsonConvert.SerializeObject(data)); + } + } + /// + /// 测试插入数据 + /// + /// + [HttpPost] + [AllowAnonymous] + public async void AddBehaviorAlarm(string info) + { + await _app.AddDaHuaImg(info); + + } + #region 接收本地模型数据 + [HttpPost] + [AllowAnonymous] + public async Task> AddImg([FromBody] AiImgReq request) + { + return await _app.AddImg(request.taskid, request.path, request.tag); + } + #endregion } } diff --git a/OpenAuth.WebApi/Model/RabbitMQService/RabbitMqListenerService.cs b/OpenAuth.WebApi/Model/RabbitMQService/RabbitMqListenerService.cs index 70c7c86..587cb6f 100644 --- a/OpenAuth.WebApi/Model/RabbitMQService/RabbitMqListenerService.cs +++ b/OpenAuth.WebApi/Model/RabbitMQService/RabbitMqListenerService.cs @@ -1,6 +1,9 @@ -using System.Text; +using DocumentFormat.OpenXml.Spreadsheet; +using OpenAuth.App.ServiceApp.Algo; +using OpenAuth.WebApi.Model.mqtt; using RabbitMQ.Client; using RabbitMQ.Client.Events; +using System.Text; namespace OpenAuth.WebApi.Model.RabbitMQService { @@ -12,8 +15,12 @@ namespace OpenAuth.WebApi.Model.RabbitMQService private readonly Dictionary _queueRoutingMap = new(); private readonly object _lock = new(); private readonly List _bindings = new(); - public RabbitMqListenerService() - { + private readonly ILogger _logger; + private DaHuaAiApp _app; + public RabbitMqListenerService(ILogger logger, DaHuaAiApp app) + { + _logger = logger; + _app = app; _factory = new ConnectionFactory { HostName = "123.132.248.154", @@ -45,22 +52,57 @@ namespace OpenAuth.WebApi.Model.RabbitMQService _connection = await _factory.CreateConnectionAsync(stoppingToken); _channel = await _connection.CreateChannelAsync(); //await BindQueueAsync(_channel, "processing_event", "topic", "event.trafficJunction.1.sdhc"); - foreach (var binding in _bindings) + var queueOk = await _channel.QueueDeclareAsync(queue: "", + durable: false, + exclusive: true, + autoDelete: true); + //await _channel.QueueBindAsync(queueOk.QueueName, "processing_event", "event.eventNotAlarm.picture.1.#"); + await _channel.QueueBindAsync(queueOk.QueueName, "processing_event", "event.behaviorAlarm.picture.1.#"); + var consumer = new AsyncEventingBasicConsumer(_channel); + consumer.ReceivedAsync += async (sender, ea) => { - await BindQueueAsync(_channel, binding.Exchange, binding.ExchangeType, binding.RoutingKey); - } + + var body = ea.Body.ToArray(); + var message = Encoding.UTF8.GetString(body); + Console.WriteLine($"接收数据[processing_event]: {message}"); + // Exchange 来做不同处理 + switch (ea.Exchange) + { + case "processing_event": + await _app.AddDaHuaImg(message); + break; + case "thing_event": + Console.WriteLine($"[thing_event] {message}"); + break; + default: + Console.WriteLine($"[Other:{ea.RoutingKey}] {message}"); + break; + } + + await Task.Yield(); + }; + + await _channel.BasicConsumeAsync("", autoAck: true, consumer); + //foreach (var binding in _bindings) + //{ + // await BindQueueAsync(_channel, binding.Exchange, binding.ExchangeType, binding.RoutingKey); + //} } private async Task BindQueueAsync(IChannel channel, string exchange, string exchangeType, string routingKey) { - await channel.ExchangeDeclareAsync(exchange, exchangeType, durable: true); - await channel.QueueDeclareAsync("", durable: true, exclusive: false, autoDelete: false); - await channel.QueueBindAsync("", exchange, routingKey); + //await channel.ExchangeDeclareAsync(exchange, exchangeType, durable: true); + //await channel.QueueDeclareAsync("", durable: true, exclusive: false, autoDelete: false); + //var queueOk = await _channel.QueueDeclareAsync(queue: "", + // durable: false, + // exclusive: true, + // autoDelete: true); + //await channel.QueueBindAsync(queueOk.QueueName, exchange, routingKey); var consumer = new AsyncEventingBasicConsumer(channel); consumer.ReceivedAsync += async (sender, ea) => { - + var body = ea.Body.ToArray(); var message = Encoding.UTF8.GetString(body); Console.WriteLine($"[processing_event]: {message}"); @@ -82,7 +124,7 @@ namespace OpenAuth.WebApi.Model.RabbitMQService }; await channel.BasicConsumeAsync("", autoAck: true, consumer); - } + } //public async Task AddListenerAsync(string exchange, string exchangeType, string routingKey) //{ // _connection = await _factory.CreateConnectionAsync(); diff --git a/OpenAuth.WebApi/Model/RabbitMQService/RabbitMqSender.cs b/OpenAuth.WebApi/Model/RabbitMQService/RabbitMqSender.cs new file mode 100644 index 0000000..91aae41 --- /dev/null +++ b/OpenAuth.WebApi/Model/RabbitMQService/RabbitMqSender.cs @@ -0,0 +1,75 @@ +using RabbitMQ.Client; +using System.Text; + +namespace OpenAuth.WebApi.Model.RabbitMQService +{ + public class RabbitMqSender : IAsyncDisposable + { + private readonly IConnection _connection; + private readonly IChannel _channel; + private const string ExchangeName = "mps_event"; + private const string ExchangeType = "topic"; + + public RabbitMqSender(IConnection connection, IChannel channel) + { + _connection = connection; + _channel = channel; + } + public static async Task CreateAsync(string hostName, int port, string userName, string password) + { + var factory = new ConnectionFactory() + { + HostName = hostName, + UserName = userName, + Password = password, + Port = port, + AutomaticRecoveryEnabled = true, // 自动重连 + NetworkRecoveryInterval = TimeSpan.FromSeconds(5), + }; + + var connection = await factory.CreateConnectionAsync(); + var channel = await connection.CreateChannelAsync(); + await channel.ExchangeDeclareAsync(exchange: ExchangeName, type: ExchangeType, durable: true); + //await channel.QueueDeclareAsync("sdhc", durable: true, exclusive: false, autoDelete: false); + var queueOk = await channel.QueueDeclareAsync(queue: "", + durable: false, + exclusive: true, + autoDelete: true); + await channel.QueueBindAsync(queueOk.QueueName, "mps_event", "event.capturePic.1.sdhc04"); + return new RabbitMqSender(connection, channel); + } + public async Task SendAsync(string routeKey, string message) + { + var body = Encoding.UTF8.GetBytes(message); + var properties = new BasicProperties() + { + Persistent = true + }; + // 监听 BasicReturn 事件 + _channel.BasicReturnAsync += (sender, args) => + { + var returnedMessage = Encoding.UTF8.GetString(args.Body.ToArray()); + Console.WriteLine($"[BasicReturn] Message returned: {returnedMessage}"); + Console.WriteLine($"ReplyCode: {args.ReplyCode}, ReplyText: {args.ReplyText}"); + Console.WriteLine($"Exchange: {args.Exchange}, RoutingKey: {args.RoutingKey}"); + return Task.CompletedTask; + }; + + await _channel.BasicPublishAsync(exchange: "mps_event", + routingKey: routeKey, + mandatory: true, + basicProperties: properties, + body: body); + + Console.WriteLine($"[RabbitMQ] 已发送到routeKey {routeKey}:{message}"); + } + public async ValueTask DisposeAsync() + { + if (_channel != null) + await _channel.CloseAsync(); + + if (_connection != null) + await _connection.CloseAsync(); + } + } +} diff --git a/OpenAuth.WebApi/Startup.cs b/OpenAuth.WebApi/Startup.cs index 4b64f46..3225cd7 100644 --- a/OpenAuth.WebApi/Startup.cs +++ b/OpenAuth.WebApi/Startup.cs @@ -183,8 +183,8 @@ namespace OpenAuth.WebApi #endregion #region rabbitmq - //services.AddSingleton(); - //services.AddHostedService(sp => sp.GetRequiredService()); + services.AddSingleton(); + services.AddHostedService(sp => sp.GetRequiredService()); #endregion #region AppSetting