You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

75 lines
2.3 KiB
C#

using DSWeb.Common.DB;
using log4net;
using Newtonsoft.Json;
using RabbitMQ.Client;
using RabbitMQ.Client.Events;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DSWeb.EventBus
{
public static class MqProcActionLog
{
private const string ExchangeName = "djy.action";
private const string QueueName = "djy.action";
private static string FeedbackMqUri = ConfigurationManager.AppSettings["ActionLogMQUri"];
private static IConnection mqConn;
private static ILog logger = LogManager.GetLogger("MqProcActionLog");
public static void DoProcess()
{
logger.Debug($"动作记录开始执行");
ConnectionFactory factory = new ConnectionFactory();
factory.Uri = new Uri(FeedbackMqUri);
mqConn = factory.CreateConnection();
IModel model = mqConn.CreateModel();
model.ExchangeDeclare(ExchangeName, ExchangeType.Direct);
model.QueueDeclare(QueueName, false, false, false, null);
var consumer = new EventingBasicConsumer(model);
consumer.Received += (ch, ea) =>
{
var body = ea.Body;
var strBody = Encoding.UTF8.GetString(body.ToArray());
logger.Debug($"动作记录数据:{strBody}");
try
{
//保存数据
var objRec = JsonConvert.DeserializeObject<DjyActionLog>(strBody);
DjyActionDataContext djyActionData = new DjyActionDataContext();
objRec.GID = Guid.NewGuid().ToString();
djyActionData.DjyActionLog.Add(objRec);
djyActionData.SaveChanges();
}
catch (Exception ex)
{
logger.Error($"处理动作记录数据时出错:");
logger.Error(ex.Message);
logger.Error(ex.StackTrace);
}
};
model.BasicConsume(QueueName, true, consumer);
}
public static void StopProcess()
{
if (mqConn != null && mqConn.IsOpen)
{
mqConn.Close();
mqConn = null;
}
}
}
}