Все изменения (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": "ivan2@antonov.site", "value": false, "confirmed": false}
Пользователь с почтой ivan2@antonov.site отписан от Email, почта не подтверждена
{"type": 0, "id": "vasya@antonov.site", "value": true, "confirmed": false}
Пользователь с почтой vasya@antonov.site подписан на Email, почта не подтверждена
{"type": 0, "id": "i.antonov@company.ru", "value": false, "confirmed": true}
Пользователь с почтой i.antonov@company.ru отписан от Email, почта подтверждена
{"type": 0, "id": "antonowano@gmail.com", "value": true, "confirmed": true}
Пользователь с почтой antonowano@gmail.com подписан на 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.