1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/kekingcn-kkbinlog

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
readme.md

1. Обзор

mysql, MongoDB данные изменения мониторинг и распространение Этот проект направлен на упрощение мониторинга изменений данных в различных таблицах MySQL и MongoDB. Проект зависит от Redis и MySQL. Сценарии использования: обновление кеша, гетерогенные системы...

2. Использование

По умолчанию, способ распространения данных от bin-log-distributor-app клиенту основан на Redis. Если необходимо разработать на основе других технологий, таких как MQ, нужно только реализовать интерфейс DataPublisher в bin-log-distributor-pub и интерфейс в bin-log-distributor-client.

2.1. Сервер

Сервер является модулем bin-log-distributor-app в проекте. Он предоставляет функцию мониторинга двоичного журнала MySQL и распространения изменений.

2.1.1. Справочная конфигурация

# Адрес Redis
spring.redisson.address=redis://192.168.1.204:6379

# Учетные данные MySQL для мониторинга двоичных журналов
binaryLog.host = 192.168.1.204
binaryLog.port = 3306
binaryLog.username = aa
binaryLog.password = aa
binaryLog.serverId = 1

# Чтение имен столбцов для сопоставления
spring.datasource.url = jdbc:mysql://${binaryLog.host}:${binaryLog.port}/mysql?autoReconnect=true&useUnicode=true&characterEncoding=utf-8
spring.datasource.username = ${binaryLog.username}
spring.datasource.password = ${binaryLog.password}
spring.datasource.driverClassName = com.mysql.jdbc.Driver

# Информация о подключении RabbitMQ (если используется только клиент Redis, можно не использовать)
spring.rabbit.host = 192.168.1.204
spring.rabbit.port = 5672
spring.rabbit.username = aa
spring.rabbit.password = aa
spring.rabbit.virtualHost = /binlog

2.1.2. Запуск

Скомпилируйте и упакуйте проект, затем запустите bin-log-distributor-app-${version}-SNAPSHOT.jar с помощью команды java -jar. Подробнее см. в руководстве Spring Boot.

2.2. Клиент

2.2.1. Redis клиент

2.2.1.1. Добавление зависимости

<dependency>
    <groupId>cn.keking.project</groupId>
    <artifactId>bin-log-distributor-client-redis</artifactId>
    <version>${version}</version>
</dependency>

2.2.1.2. Добавление конфигурации клиента

# Автоматическое подключение к серверу (адрес сервера из пункта 2.1)
databaseEventServerUrl=http://localhost:8885/client/addAll
# Имя приложения
appName=lbt-service-ext-redis
# Адрес Redis
spring.redisson.address=redis://192.168.1.204:6379

2.2.1.3. Создание обработчика и реализация интерфейса DatabaseEventHandler

/**
 * LockLevel определяет уровень сохранения порядка. None — по умолчанию.
 * TABLE — порядок выполнения для одной таблицы.
 * COLUMN — порядок выполнения при совпадении значений столбца.
 * NONE — без сохранения порядка.
 */
@Service
@HandleDatabaseEvent(database = "Rana_G", table = "PTP_PROJ_REP_HIS", events = {DatabaseEvent.UPDATE_ROWS, DatabaseEvent.DELETE_ROWS},lockLevel = LockLevel.TABLE)
public class ProjRepHisDatabaseEventHandler implements DatabaseEventHandler {
    private static final Logger logger = LoggerFactory.getLogger(ProjRepHisDatabaseEventHandler.class);

    @Override
    public void handle(EventBaseDTO eventBaseDTO) {
        logger.info(JSON.toJSONString(eventBaseDTO));
        // todo Здесь добавить соответствующую логику
    }
}

2.2.1.4. Запуск мониторинга и регистрация обработчиков

@Component
public class DatabaseEventListener {
    private static Logger logger = LoggerFactory.getLogger(DatabaseEventListener.class);
    
    @Autowired
    private RedissonClient redissonClient;

    @Value("#{env.databaseEventServerUrl}")
    private String serverUrl;
    
    @Value("#{env.appName}")
    private String appName;
    
    // Внедрение сервиса из шага 3
    @Autowired
    private ProjRepHisDatabaseEventHandler projRepHisDatabaseEventHandler; 

    @PostConstruct
    public void start() {
        // Инициализация подписчика
        DataSubscriber dataSubscriber = new DataSubscriberRedisImpl(redissonClient);
        new BinLogDistributorClient(appName, dataSubscriber)
                // Регистрация обработчика в binlog
                .setQueueType(ClientInfo.QUEUE_TYPE_REDIS) 
                .registerHandler(projRepHisDatabaseEventHandler)
                .setServerUrl(serverUrl).autoRegisterClient().start();
    }
}

2.2.2. Rabbitmq клиент

2.2.2.1. Добавление зависимости

<dependency>
    <groupId>cn.keking.project</groupId>
    <artifactId>bin-log-distributor-client-rabbitmq</artifactId>
    <version>${version}</version>
</dependency>

2.2.2.2. Добавление конфигурации клиента

# Автоматическое подключение к серверу (адрес сервера из пункта 2.1)
databaseEventServerUrl=http://localhost:8885/client/addAll
# Имя приложения
appName=lbt-service-ext-rabbit
# Адрес Redis (RabbitMQ также использует Redis для распределённых блокировок)
spring.redisson.address=redis://192.168.1.204:6379
# Конфигурация RabbitMQ
``` **spring.rabbit.host** = 192.168.1.204

**spring.rabbit.port** = 5672

**spring.rabbit.username** = aa

**spring.rabbit.password** = aa

**spring.rabbit.virtualHost** = /binlog

**spring.rabbit.apiUrl** = http://192.168.1.204:15672/api/

#### 2.2.2.3 Написать handler, реализовать DatabaseEventHandler интерфейс, и добавить аннотацию @HandleDatabaseEven

/**

  • LockLevel для поддержания уровня последовательности, None по умолчанию

  • TABLE -> выполнение в порядке таблицы

  • COLUMN -> выполнение с одинаковой последовательностью столбцов

  • NONE -> без порядка */ @Service @HandleDatabaseEvent(database = "Rana_G", table = "PTP_PROJ_REP_HIS", events = {DatabaseEvent.UPDATE_ROWS, DatabaseEvent.DELETE_ROWS},lockLevel = LockLevel.TABLE) public class ProjRepHisDatabaseEventHandler implements DatabaseEventHandler { private static final Logger logger = LoggerFactory.getLogger(ProjRepHisDatabaseEventHandler.class);

    @Override public void handle(EventBaseDTO eventBaseDTO) { logger.info(JSON.toJSONString(eventBaseDTO)); // todo написать соответствующую логику здесь } }


#### 2.2.2.4 Запустить прослушивание, когда 2-й handler управляется контейнером, необходимо зарегистрировать его вручную через registerHandler(projRepHisDatabaseEventHandler), если контейнер не требуется, можно автоматически добавить через autoScanHandler()

@Component public class DatabaseEventListener { private static Logger logger = LoggerFactory.getLogger(DatabaseEventListener.class);

@Autowired
private RedissonClient redissonClient;

@Value("#{env.databaseEventServerUrl}")
private String serverUrl;

@Value("#{env.appName}")
private String appName;
//ввести service из третьего шага

@Autowired
private ProjRepHisDatabaseEventHandler projRepHisDatabaseEventHandler; 

//org.springframework.amqp.rabbit.connection.ConnectionFactory создать spring bean самостоятельно
@Autowired
private ConnectionFactory connectionFactory; 

//com.rabbitmq.http.client.Client создать spring bean самостоятельно
@Autowired
private Client rabbitHttpClient; 

@PostConstruct
public void start() {
    //инициализировать реализацию подписки
    DataSubscriber dataSubscriber = new DataSubscriberRabbitMQImpl(connectionFactory, rabbitHttpClient, redissonClient);
    new BinLogDistributorClient(appName, dataSubscriber)
            //по умолчанию используется redis, здесь обязательно указать QueueType для реализации mq
            .setQueueType(ClientInfo.QUEUE_TYPE_RABBIT)
            .registerHandler(projRepHisDatabaseEventHandler)
            .setServerUrl(serverUrl).autoRegisterClient().start();
}

}


# 2.3 Фронтенд-модуль управления
>Фронтенд-модуль управления представляет собой интерфейс на основе vue для мониторинга состояния различных приложений.
#### Добавление источника данных MySQL

#### Управление данными
![](https://oscimg.oschina.net/oscnet/up-d00682b927661b6a9da13536546d89ffc1e.png)

#### Журнал прогресса
![](https://oscimg.oschina.net/oscnet/up-0b311ee0cf6b0851a6ee9de998f0d03fede.png)

#### Мониторинг очередей рассылки
![](https://oscimg.oschina.net/oscnet/up-828e4558f279bed409ca583572f14aa3bb3.png)

#### Добавить подписку на данные
![](https://oscimg.oschina.net/oscnet/up-7c094efbc9fdcccc8d5e4f1e6b40b346ea8.png)
# 3 Прочее

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Поддержка подписки на распространение изменений данных MySQL и MongoDB. Развернуть Свернуть
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/kekingcn-kkbinlog.git
git@api.gitlife.ru:oschina-mirror/kekingcn-kkbinlog.git
oschina-mirror
kekingcn-kkbinlog
kekingcn-kkbinlog
master