Все изменения (Email и SMS) подписок пользователя на сайте фиксируются в таблице
subscription_change. Написанная команда выбирает все необработанные изменения выполненные сайтом
(is_processed = 0 AND source != 4), отправляет их в Kafka и помечает как обработанные (is_processed = 1).
Это позволяет другим сервисам (к примеру 1С) обновить данные у себя.
Сообщения отправляются в топик subscription.
type- индикатор типа (0 - email, 1 - смс)id- email или номер телефона в зависимости от типаvalue- состояние подписки (true- включена,false- выключена)confirmed- подтвержден ли email или номер телефона в зависимости от типа (true- подтвержден,false- не подтвержден)
{"type": 1, "id": "+7(930)288-08-07", "value": true, "confirmed": true}Пользователь с номером телефона +7(930)288-08-07 подписан на SMS, номер телефона подтвержден
{"type": 1, "id": "+7(123)213-12-31", "value": false, "confirmed": true}Пользователь с номером телефона +7(123)213-12-31 отписан от SMS, номер телефона подтвержден
{"type": 0, "id": "[email protected]", "value": false, "confirmed": false}Пользователь с почтой [email protected] отписан от Email, почта не подтверждена
{"type": 0, "id": "[email protected]", "value": true, "confirmed": false}Пользователь с почтой [email protected] подписан на Email, почта не подтверждена
{"type": 0, "id": "[email protected]", "value": false, "confirmed": true}Пользователь с почтой [email protected] отписан от Email, почта подтверждена
{"type": 0, "id": "[email protected]", "value": true, "confirmed": true}Пользователь с почтой [email protected] подписан на Email, почта подтверждена
Для деплоя нужно установить следующие переменные окружения
| Переменная | Описание | Пример |
|---|---|---|
| MYSQL_DSN | строка для подключения к БД | user:password@tcp(127.0.0.1:3306)/database |
| KAFKA_BROKERS | список брокеров для подключения к Kafka | broker1:9092,broker2:9092,broker3:9092 |
| KAFKA_USERNAME | имя пользователя для подключения к Kafka | admin |
| KAFKA_PASSWORD | пароль пользователя для подключения к Kafka | admin-secret |
Здесь описана инструкция как запустить нашу команду в среде разработки.
- Для запуска и отладки программы нужно развернуть docker compose
docker-compose -f docker-compose.dev.yml up-
Нужно создать новый топик с именем subscription. Проще всего это сделать через dashboard kafka по адресу http://localhost:8080/.
-
Запускаем нашу команду в docker
docker-compose -f docker-compose.dev.yml run appКроме того у нас есть возможность запускать команду не в контейнере, а прямо на локальном компьютере.
Для этого нужно установить Golang. И запустить программу со следующими environment variables:
| Переменная | Пример |
|---|---|
| MYSQL_DSN | user:password@/database |
| KAFKA_BROKERS | 127.0.0.1:9092,127.0.0.1:9093,127.0.0.1:9094 |
| KAFKA_USERNAME | kafka |
| KAFKA_PASSWORD | kafka-secret |
Результат выполненной работы мы можем наблюдать в dashboard kafka.