mysql, MongoDB данные изменения мониторинг и распространение Этот проект направлен на упрощение мониторинга изменений данных в различных таблицах MySQL и MongoDB. Проект зависит от Redis и MySQL. Сценарии использования: обновление кеша, гетерогенные системы...
По умолчанию, способ распространения данных от bin-log-distributor-app клиенту основан на Redis. Если необходимо разработать на основе других технологий, таких как MQ, нужно только реализовать интерфейс DataPublisher в bin-log-distributor-pub и интерфейс в bin-log-distributor-client.
Сервер является модулем bin-log-distributor-app в проекте. Он предоставляет функцию мониторинга двоичного журнала MySQL и распространения изменений.
# Адрес 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
Скомпилируйте и упакуйте проект, затем запустите bin-log-distributor-app-${version}-SNAPSHOT.jar с помощью команды java -jar. Подробнее см. в руководстве Spring Boot.
<dependency>
<groupId>cn.keking.project</groupId>
<artifactId>bin-log-distributor-client-redis</artifactId>
<version>${version}</version>
</dependency>
# Автоматическое подключение к серверу (адрес сервера из пункта 2.1)
databaseEventServerUrl=http://localhost:8885/client/addAll
# Имя приложения
appName=lbt-service-ext-redis
# Адрес Redis
spring.redisson.address=redis://192.168.1.204:6379
/**
* 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 Здесь добавить соответствующую логику
}
}
@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();
}
}
<dependency>
<groupId>cn.keking.project</groupId>
<artifactId>bin-log-distributor-client-rabbitmq</artifactId>
<version>${version}</version>
</dependency>
# Автоматическое подключение к серверу (адрес сервера из пункта 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
#### Управление данными

#### Журнал прогресса

#### Мониторинг очередей рассылки

#### Добавить подписку на данные

# 3 Прочее
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )