Для оповещения об изменениях в MSSQL можно использовать класс SqlDependencyEx.
Он работает на основе MSSQL Service broker, который нужно предварительно включить, выгнав пользователей и запустив скрипт:
ALTER DATABASE dbName
SET NEW_BROKER
WITH ROLLBACK IMMEDIATE
GO
ALTER DATABASE dbName
SET DISABLE_BROKER
GO
ALTER DATABASE dbName
SET ENABLE_BROKER
GO
ALTER DATABASE dbName SET TRUSTWORTHY ON
go
Выясняем через SQL profiler таблицу, за которой мы хотим наблюдать.
И указываем эту таблицу в конструкторе класса, в котором создаются триггеры в таблицах. В триггерах идет отправка сообщений через MSSQL Service broker.
using ServiceBrokerListener.Domain;
using System;
using System.Data.SqlClient;
namespace MSSQLOrderChangeNotification
{
class MSSQLOrderChangeNotification
{
static void Main(string[] args)
{
var listener = new SqlDependencyEx(connectionString, DbName, "_AccumRgT16572");
//// e.Data contains actual changed data in the XML format
listener.TableChanged += (o, e) =>
{
Console.WriteLine("Your table was changed!" + Environment.NewLine +
e.NotificationType + Environment.NewLine + e.Data);
};
//// After you call the Start method you will receive table notifications with
//// the actual changed data in the XML format
listener.Start();
Console.WriteLine(" Press [enter] to exit.");
Console.ReadLine();
listener.Stop();
}
}
}
В итоге можем отправлять это событие куда угодно, используя все возможности C# .NET. Например, в RabbitMQ.
Класс несложный, и его можно переписать на другие языки при необходимости.
Переписал класс на golang (кроссплатформенный, быстро компилируемый и потребляет мало памяти) - это сервис работающий по протоколу AMQP получающий указание о подписке, и отправляющий в указанную очередь сообщения об изменении указанной таблицы. Таким образом можно подключиться к очереди на любом языке программирования по протоколу AMQP и наблюдать за таблицами MSSQL и реализовать событийно-ориентированную архитектуру.