private void ReviceQueue(string topic) { string message = null; try { //在队列的头部拿出 message = Redis.ListLeftPop(topic); if (string.IsNullOrEmpty(message)) { return; } DataChange data = message.JsonToObject <DataChange>(); var result = _dbTypeMapper.TransferToDb(data); if (!result.Success) { _logger.LogError($"Topic:{topic},Message:{message},Error:{result.Msg}"); } } catch (Exception e) { _logger.LogError(e, $"Topic:{topic},Message:{message ?? ""}"); } }
/// <summary> /// 接收消息 /// </summary> /// <param name="message"></param> public override void OnReceived(MessageBody message) { //如果不返回ACK 则 RabbitMQ 不会再发送数据 message.Consumer.Model.BasicAck(message.BasicDeliver.DeliveryTag, true); if (string.IsNullOrEmpty(message.Content)) { return; } try { DataChange data = message.Content.JsonToObject <DataChange>(); var result = _dbTypeMapper.TransferToDb(data); if (!result.Success) { OnAction?.Invoke(MessageLevel.Error, $"TransferToDb Error", new Exception(result.Msg)); } } catch (Exception ex) { OnAction?.Invoke(MessageLevel.Error, ex.Message + $"【{message.Content}】", ex); } }
public Task Handle(CanalBody notification) { var message = notification.Message; //过滤 if (_option.DbTables.Any() && !_option.DbTables.Contains(message.DbName + "." + message.TableName)) { return(Task.CompletedTask); } var messageStr = JsonConvert.SerializeObject(message); Canal.SqlParse.Models.canal.DataChange data = messageStr.JsonToObject <Canal.SqlParse.Models.canal.DataChange>(); var result = _dbTypeMapper.TransferToDb(data); if (!result.Success) { _logger.LogError($"Topic:{message.CanalDestination+"."+message.DbName+"."+message.TableName},Message:{messageStr},Error:{result.Msg}"); } notification.Succ = true; return(Task.CompletedTask); }
public Task Handle(CanalBody body) { var notificationList = body.Message; var metric = new Dictionary <string, MetricCount>(); Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); foreach (var message in notificationList) { //过滤 if (_option.DbTables != null && !_option.DbTables.Contains(message.DbName + "." + message.TableName)) { IncrementMetric(metric, message, false); continue; } var result = _dbTypeMapper.TransferToDb(message); if (!result.Success) { _logger.LogError($"Topic:{message.CanalDestination + "." + message.DbName + "." + message.TableName},Message:{Newtonsoft.Json.JsonConvert.SerializeObject(message)},Error:{result.Msg}"); } else { IncrementMetric(metric, message); } } stopwatch.Stop(); var doutime = (int)stopwatch.Elapsed.TotalSeconds; var time = doutime > 1 ? ParseTimeSeconds(doutime) : stopwatch.Elapsed.TotalMilliseconds + "ms"; _logger.LogInformation($"【batchId:{body.BatchId}】processTime:{time}"); foreach (var item in metric) { _logger.LogInformation($"batchId:{body.BatchId},process:{this.GetType().FullName},target:{item.Key},total:{item.Value.Total},success:{item.Value.SuccCount}"); } return(Task.CompletedTask); }