Я написал платформу для обмена текстовыми сообщениями за три месяца и сделал ее открытым исходным кодом!
Я написал платформу для обмена текстовыми сообщениями за три месяца и сделал ее открытым исходным кодом!

1 Намерение новичка

Привет всем, я брат Юн. Мне потребовалось три месяца, чтобы вручную написать сервис платформы текстовых сообщений. platform-sms,сегодня Открытый исходный код выйдет Beta Версия.

Напишите это Открытый исходный кодпроект Намерение новичка На самом деле это очень просто:"Помогите младшим и средним инженерам по исследованиям и разработкам начать работу с архитектурным проектированием и повысить свою техническую осведомленность."。

В 2018 году как архитектор участвовал в реконструкции СМС-платформы. Сценарии отправки текстовых сообщений включают сервисы погашения, CRM, сервисы продвижения и т. д.

Разные технические команды используют клиентский режим для отправки текстовых сообщений, но его можно условно разделить на четыре типа:

  • Используйте Короткое, предоставленное Alibaba Cloud сообщение SDK отправлять Короткое сообщение 。
  • Отправить Короткое сообщение непосредственно на основе образца, предоставленного Yimei.
  • Используйте SDK Короткое сообщение, предоставленный Greentown, чтобы отправить Короткое сообщение.
  • Архитектуракоманда Короткое сообщение SDK, похоже на SMS4Jметод проектирования,Поддержка Yimei, Greentown Короткое сообщение доставка.

Недостатки клиентской модели в сценариях совместной работы нескольких команд по-прежнему очевидны:

  • Стоимость обслуживания

Если операция больше не использует определенный канал SMS, это повлияет на многие команды, и им придется сотрудничать, чтобы изменить конфигурацию и снова выйти в Интернет, что отнимает очень много времени и средств.

  • Невозможно поддерживать расширенные функции

Клиенту сложно реализовать определенные функции. Например, время ожидания клиента при отправке SMS-сообщений через трехсторонние каналы из-за случайных обстоятельств (сетевые причины). В это время SMS-сообщения необходимо отправлять на резервные каналы. для обеспечения успешности отправки SMS.

поэтому,В сценариях совместной работы нескольких команд,Короткое сообщение Модель обслуживания должна бытьРежим сервера

Режим сервера
Режим сервера

Я сослался на идеи дизайна SMS-сервиса Tencent Cloud:

  1. Имитируйте облако Tencent SDK Предназначен для обеспечения простой и удобной отправки Короткое сообщениеметод (Одно сообщение, массовое сообщение, одиночное маркетинговое сообщение, массовое маркетинговое сообщение, шаблонное одиночное сообщение, шаблонное массовое сообщение) ;
  2. Дизайн Короткое сообщение Служить API окончание, получение и отправка Короткое сообщениепросить,отправлять Короткое информация сообщения в очередь сообщений;
  3. worker Сообщения о потреблении услуги, согласно алгоритму балансировки нагрузки, вызывают Короткое у разных провайдеров каналов. сообщениеинтерфейс;
  4. В консоли можно просматривать Короткое Сообщение Отправка записей, настройка информации о провайдере канала, информации о шаблоне и т. д.

После завершения исследований и разработки платформы SMS она отвечала потребностям бизнеса на тот момент. Поскольку управление SMS также было унифицировано, что повысило эффективность доступа бизнеса к услугам SMS, это также признали различные технические группы.

По мере накопления опыта я видел SMS-сервисы многих компаний. Основные проблемы заключаются не более чем в двух моментах:

  1. Короткое сообщение Вопросы границ сервиса и бизнеса.

Для удовлетворения потребностей в бизнес-услугах к платформе SMS добавляется слишком много бизнес-функций, что приводит к раздутию функций SMS-сервиса и непреднамеренному добавлению скрытых рисков.

  1. Переключаться между сторонними каналами очень неудобно.

Когда оператору необходимо переключиться со стороннего SMS-канала A на B, стоимость обслуживания при добавлении кода стороннего канала возрастает, поскольку код недостаточно абстрактен.

по этим причинам,Я хочу написать одинмини-версияиз Короткое сообщение, он должен включать в себя следующие функции:

  1. Простое Короткое сообщение SDK Поддержка отправки Короткое по шаблону сообщение 。

Бизнес-службу не волнует, из какого стороннего SMS-канала отправляется текстовое сообщение. Ему нужно только обеспечить вероятность успешной отправки текстового сообщения.

Поэтому SDK поставлятьизосновнойинтерфейсда:Отправьте СМС по номеру шаблона

Alibaba Cloud, Tencent Cloud и Huawei Cloud предоставляют интерфейсы для отправки текстовых сообщений в соответствии с шаблонами. В целях единообразного управления шаблонами мы предоставляем только интерфейсы для отправки текстовых сообщений в соответствии с шаблонами.

Короткое сообщение平台需要поставлять业务СлужитьизappKey иappSecret , SDK Взаимодействуйте с сервером через фиксированный протокол.

  1. Короткое сообщение платформа поддерживает управление шаблонами 。

Alibaba Cloud, Tencent Cloud и Huawei Cloud предоставляют интерфейсы управления подписями и шаблонами. Таким образом, на уровне дизайна продукта теоретически мы можем управлять всеми подписями и шаблонами через платформу SMS.

Платформа SMS в настоящее время предоставляет функцию ручной привязки шаблонов SMS, то есть нам необходимо сначала подать заявку на подписи и шаблоны в Alibaba Cloud или Tencent Cloud, а затем привязать их к шаблонам, которые мы создаем на платформе.

  1. Режим адаптера поддерживает сторонние каналы.

Ссылка Открытый исходный кодпроектcanalизадаптермодуль,Будут ли три партии Короткое канал сообщения API Отдельные модули обслуживаются отдельно, что может значительно повысить удобство сопровождения кода.

2 Архитектура

Дизайн проекта должен быть простым,из-за этогоиз目标首先да让Краткое введение в проектирование архитектуры для инженеров младшего и среднего уровня.

Так что я буду Короткое сообщение Платформа предназначена дляОдно приложениеизмодель,Картина Архитектуры следующая:

Платформа Короткое сообщение разделена на две части.,Эти две части можно развернуть независимо, либо файлы внешнего интерфейса можно поместить во внутреннюю часть для создания единого пакета развертывания.

1. Интерфейс: admin-ui

Консольный модуль представляет собой проект vue. После входа в систему администратор может выполнять управление приложениями, каналами, SMS-сообщениями и шаблонами.

2. Бэкэнд: админ-веб

Серверный модуль разделен на пять модулей в соответствии с функциями: уровень управления запросами, уровень бизнес-сервисов, командный процессор, подключаемый модуль адаптера стороннего канала и уровень доступа к базе данных.

3 Демо

3.1 Подготовка окружающей среды

1. Создайте базу данных и связанные таблицы.

Создать базу данныхtech_platform ,осуществлятьdoc/sql в каталоге tech_platform.sql

Эффект после выполнения следующий:

2. Измените конфигурацию пакета развертывания.

от Release скачать platform-sms-admin.tar.gz , после распаковки введите confОглавление 。

редактировать application.yml документ:

Войдите в каталог bin и запустите службу:

Язык кода:shell
копировать
bin/startup.sh

3.2 Процесс работы

1. Страница входа

После начала службы,Адрес доступа:http://localhost:8089

Имя пользователя и пароль хранятся в conf каталог application.yml,Имя пользователя и пароль по умолчанию: admin/admin1984.

2. Создайте новое приложение.

Информация о приложении включает имя приложения, appKey , ключ приложения,Примечание。в,приложение key и Ключ используется в клиенте SDK Конфигурация необходима, когда 。

3. Создайте новый трехсторонний SMS-канал.

Примечание. Поскольку запрос SDK Tencent Cloud должен содержать APPID, в бета-версии AppId хранится в атрибуте Attachment.

4. Создайте шаблон

существоватьУправление шаблонамимодуль,НажмитеСоздать новый шаблонкнопка。

Создать новый шаблончас,Имя подписи должно соответствовать подписи, применяемой каналом.

На рисунке ниже показана подпись автора приложения Tencent Cloud. Созданный автором шаблон должен соответствовать подписи аккаунта Tencent Cloud.

После создания шаблона нам необходимо привязать канал. Сначала необходимо создать шаблон SMS в трехстороннем канале, а затем отправить привязку.

  1. Сторонний канал сначала создает шаблон Короткое сообщение.

Как показано на рисунке выше, автор создал шаблон SMS с номером 1955325, поскольку нам необходимо привязать шаблон этого канала в интерфейсе привязки. Теоретически шаблон, созданный на платформе SMS, может быть привязан к нескольким каналам.

  1. Привязать канал

После завершения привязки вы можете просмотреть список шаблонов на странице управления шаблонами.

3.3 Отправить СМС

Для отправки текстовых сообщений вы можете обратиться к модулю DEMO:

1. Добавьте зависимости

Язык кода:html
копировать
<dependency>
    <groupId>com.courage</groupId>
    <artifactId>platform-sms-client</artifactId>
    <version>${parent.version}</version>
</dependency>

2. Конфигурация клиента

первый в application.ymlКонфигурация следующая:

Язык кода:yaml
копировать
sms:
  smsServerUrl: http://localhost:8089
  appKey: qQjEiFzn80v8VM4h
  appSecret: 9c465ece754bd26a9be77f3d0e2606bd

Затем напишите класс конфигурации:

Язык кода:java
копировать
@Configuration
public class SmsConfiguration {

    @Value("${sms.smsServerUrl}")
    private String smsServerUrl;

    @Value("${sms.appKey}")
    private String appKey;

    @Value("${sms.appSecret}")
    private String appSecret;

    @Bean
    public SmsSenderClient createClient() {
        SmsConfig smsConfig = new SmsConfig();
        smsConfig.setAppKey(appKey);
        smsConfig.setSmsServerUrl(smsServerUrl);
        smsConfig.setAppSecret(appSecret);
        SmsSenderClient smsSenderClient = new SmsSenderClient(smsConfig);
        return smsSenderClient;
    }

}

3. Одно текстовое сообщение

Язык кода:java
копировать
@Autowired
private SmsSenderClient smsSenderClient;

@GetMapping("/test")
public String test() {
    // Номер телефона
    String mobile = "15011319235";
    // Короткое Сообщение Номер шаблона платформы
    String templateId = "555829270636703745";
    // Параметры шаблона
    Map<String, String> param = new HashMap<String, String>();
    param.put("code", "1234");
    param.put("time", "10");
    SmsSenderResult senderResult = smsSenderClient.sendSmsByTemplateId(mobile, templateId, param);
    System.out.println("senderResult:" + JSON.toJSONString(senderResult));
    return "hello , first short message !";
}

После вызова интерфейса пользователь получит следующее текстовое сообщение:

4 с открытым исходным кодом

Адрес библиотеки кодов:

https://github.com/makemyownlife/platform-sms

Брат Юн хочет использовать этот проект в качестве вводного учебного проекта по Архитектуре. Вы можете изучить его в средней школе:

  1. Разработайте оптимизированный клиентский SDK.
  2. Понимание механизма SPI и шаблона адаптера.
  3. Правильно настроенная модель потоков.

Если моя статья вам полезна,Пожалуйста, помогитеСтавьте лайк, смотрите, делайте репостыодин раз,Ваша поддержка вдохновит меня на создание более качественных статей.,Большое спасибо!

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose