private void btnSendDatabaseSyncCommand_Click(object sender, EventArgs e) { DatabaseSyncCommand cmd = new DatabaseSyncCommand(); DatabaseSyncItem item1 = new DatabaseSyncItem() { Action = DatabaseSyncAction.Add, Table = "Customers", PrimaryKeyValue = "062B54F5-69AA-A108-09F8-39DB9C2F58C4" }; DatabaseSyncItem item2 = new DatabaseSyncItem() { Action = DatabaseSyncAction.Update, Table = "Customers", PrimaryKeyValue = "062B54F5-69AA-A108-09F8-39DB9C2F58C4" }; DatabaseSyncItem item3 = new DatabaseSyncItem() { Action = DatabaseSyncAction.Delete, Table = "Customers", PrimaryKeyValue = "062B54F5-69AA-A108-09F8-39DB9C2F58C4" }; cmd.SyncItemList.Add(item1); cmd.SyncItemList.Add(item2); cmd.SyncItemList.Add(item3); string json = JsonConvert.SerializeObject(cmd); _rabbitMQService.Send("exchangeName_A", "routingKey_A", json); MessageBox.Show("DatabaseSyncCommand 命令已发送。 Command 需要通过 CommandExecuterService 去解析和消费。"); }
public override void Handle(string routingKey, string strCommand) { DatabaseSyncCommand command = JsonConvert.DeserializeObject <DatabaseSyncCommand>(strCommand); foreach (DatabaseSyncConfig_Consumer consumer in _databaseSyncConfig.ConfigList.ConsumerList) { Consume(routingKey, consumer, command); } }
private void Consume(DatabaseSyncConfig_Consumer consumer, DatabaseSyncConfig_Producer producer, DatabaseSyncCommand command) { DatabaseWrapper consumerDatabase = _dataBaseList[consumer.Connection]; DatabaseWrapper producerDatabase = _dataBaseList[producer.Connection]; List <SqlExpression> sqlExpressionList = new List <SqlExpression>(); foreach (DatabaseSyncItem syncItem in command.SyncItemList) { List <DatabaseSyncConfig_Table> tableList = (from c in producer.TableDefinition.TableList where c.Name == syncItem.Table select c).ToList(); foreach (DatabaseSyncConfig_Table table in tableList) { List <CommandParameter> parameterList = new List <CommandParameter>(); parameterList.Add(new CommandParameter("@primaryKeyValue", syncItem.PrimaryKeyValue)); DataSet dataSet = producerDatabase.ExecuteDataSet( $"SELECT * FROM [{table.Name}] WHERE [{table.PrimaryKey}] = @primaryKeyValue", parameterList, new string[] { table.Name }); if (dataSet.Tables[0].Rows.Count == 0) { continue; } foreach (DataRow row in dataSet.Tables[0].Rows) { SqlStructureBuild sqlStructureBuild = new SqlStructureBuild(); sqlStructureBuild.Table = table.ConsumerTable; switch (syncItem.Action) { case DatabaseSyncAction.Add: sqlStructureBuild.Type = SqlExpressionType.Insert; break; case DatabaseSyncAction.Update: sqlStructureBuild.Type = SqlExpressionType.Update; break; case DatabaseSyncAction.Delete: sqlStructureBuild.Type = SqlExpressionType.Delete; break; default: break; } foreach (DatabaseSyncConfig_Field field in table.Field) { sqlStructureBuild.AddParameter(field.ConsumerField, row[field.Name], field.ConsumerField == table.ConsumerTablePrimaryKey); } SqlExpression sqlExpression = sqlStructureBuild.GetSqlExpression(); sqlExpressionList.Add(sqlExpression); } } } consumerDatabase.ExcuteSqlExpression(sqlExpressionList); }
private void Consume(string routingKey, DatabaseSyncConfig_Consumer consumer, DatabaseSyncCommand command) { List <DatabaseSyncConfig_Producer> producerList = (from c in consumer.ProducerList.Producer where c.RoutingKey == routingKey select c).ToList(); foreach (var producer in producerList) { Consume(consumer, producer, command); } }