using RabbitMQ.Client; using System; using System.Collections.Generic; using System.Text; namespace Edu.Common.Message { /// <summary> /// 消息队列帮助类 /// </summary> public class MessageHelper : IDisposable { private readonly ConnectionFactory _factory; private IConnection _connection; private IModel _channel; /// <summary> /// 构造函数 /// </summary> public MessageHelper() { Int32.TryParse(Common.Config.ReadConfigKey("RabbitMqConfig", subKey: "Port"), out int Port); RabbitConfig rabbitConfig = new RabbitConfig() { HostName = Common.Config.ReadConfigKey("RabbitMqConfig", subKey: "HostName"), Password = Common.Config.ReadConfigKey("RabbitMqConfig", subKey: "Password"), Port = Port, UserName = Common.Config.ReadConfigKey("RabbitMqConfig", subKey: "UserName"), QueenName = Common.Config.ReadConfigKey("RabbitMqConfig", subKey: "QueenName"), }; // 设置连接参数 _factory = new ConnectionFactory() { HostName = rabbitConfig.HostName, //默认端口 Port = Port, UserName = rabbitConfig.UserName, Password = rabbitConfig.Password, }; } /// <summary> /// 发送消息 /// </summary> /// <param name="message"></param> /// <param name="PushAppId"></param> private void SendMessage(PushMessageModel message) { try { InitConnection(); Int32.TryParse(Common.Config.ReadConfigKey("RabbitMqConfig", subKey: "Port"), out int Port); RabbitConfig rabbitConfig = new RabbitConfig() { HostName = Common.Config.ReadConfigKey("RabbitMqConfig", subKey: "HostName"), Password = Common.Config.ReadConfigKey("RabbitMqConfig", subKey: "Password"), Port = Port, UserName = Common.Config.ReadConfigKey("RabbitMqConfig", subKey: "UserName"), QueenName = Common.Config.ReadConfigKey("RabbitMqConfig", subKey: "QueenName"), }; string queenName = rabbitConfig.QueenName; var obj = new { Id = 0,// 主键 message.Title, message.Content, message.CoverImg, message.CategoryId, message.Platform, message.SendType, message.SendTime, message.ReceiveId, message.JumpUrl, message.CreateByName, message.MsgSign, message.MsgTemplateCode, message.WorkMsgType, Status = 0, CreateTime = DateTime.Now, AppId = Common.Config.PushAppId, IsRead = 0, }; var body = Encoding.UTF8.GetBytes(Common.Plugin.JsonHelper.Serialize(obj)); // 声明队列 _channel.QueueDeclare(queue: queenName, durable: true,// 设置为true表示队列是持久化的 exclusive: false, autoDelete: false, arguments: null); IBasicProperties properties = _channel.CreateBasicProperties(); properties.DeliveryMode = 2; _channel.BasicPublish(exchange: "", routingKey: queenName, basicProperties: properties, body: body); Common.Plugin.LogHelper.WriteInfo("发送企微消息:" + Common.Plugin.JsonHelper.Serialize(obj)); } catch (Exception ex) { Common.Plugin.LogHelper.Write(ex, "SendMessage"); } } /// <summary> /// 发送消息 /// </summary> /// <param name="list"></param> /// <param name="PushAppId"></param> public void SendMessage(List<PushMessageModel> list) { foreach (var item in list) { SendMessage(item); } } /// <summary> /// 初始化链接 /// </summary> private void InitConnection() { try { if (_connection == null || !_connection.IsOpen) { _connection = _factory.CreateConnection(); _channel = _connection.CreateModel(); } } catch (Exception ex) { Common.Plugin.LogHelper.Write(ex, "InitConnection"); } } /// <summary> /// 释放资源 /// </summary> public void Dispose() { _channel?.Close(); _channel?.Dispose(); _connection?.Close(); _connection?.Dispose(); } } }