- PVSM.RU - https://www.pvsm.ru -
В этой статье мы бы хотели рассказать о нашей новой платформе Job Freelance Scanner, которая находится в свободном доступе. В поисках нового проекта порой приходится мониторить фриланс площадки на наличие подходящего предложения. Это порождает ряд проблем: поиск по разным сайтам, вбивание в поиске нужных ключевых слов, отсеивание дубликатов — все это отнимает время. Плюс, надо помнить читал ли ты это предложение. Вот было бы удобно мониторить это одним инструментом, при этом в онлайн режиме.
Наша компания занимается разработкой интеграционных решений и регулярно нуждается в поиске предложений в этой области. Таким образом, сформировалась задача: разработать платформу для мониторинга предложений о работе с крупных площадок. Платформа должна отслеживать предложения, содержащие некоторые ключевые слова, и публиковать их в slack [1] канале.
После реализации приложения и локального запуска мы решили опубликовать его для сообщества, предоставить свободный доступ для использования, а также опубликовать исходники. В итоге, мы представляем платформу Job Freelance Scanner.
Job Freelance Scanner — платформа для мониторинга предложений с крупных глобальных площадок по поиску работы, разработанная компанией Leadex Systems. Эта платформа позволяет получать предложения единым потоком в канал связи (Slack) от таких площадок как:
Сообщение о новом предложении о работе поступают в кратчайшие сроки после публикации, что позволяет осуществлять мониторинг свежих предложений и откликаться на них одним из первых. Пример сообщения с предложением о работе в канале slack:
Для начала использования платформы необходимо:
Для решения поставленной задачи была разработана следующая архитектура: через определенный промежуток времени ищутся по ключевым словам предложения о работе с нужных площадок с помощью их внутреннего API. Отсеиваются уже опубликованные и рассылаются подписанным клиентам.
Как видно из схемы, проект состоит из нескольких независимых модулей. Для общения между модулями приложения используется Apache ActiveMQ в качестве брокера сообщений и MongoDB для хранения настроек клиентов. Для интеграции модулей нашего решения используется Apache Camel.
Рассмотрим подробней модуль, который конвертирует предложения о работе в сообщение для Slack и отправляет их с помощью интеграции slack компонента от Apache Camel. В основе этого компонента лежит роут описанный на Java DSL.
from("activemq:queue://" + activemqQueue +
"?username=" + activemqUser +
"&password=" + activemqPass +
"&disableReplyTo=true")
.process(jsonToPojoProcessor)
.process(aggregateJobProcessor)
.split(body())
.process(jobToSlackMessageProcessor)
.to("direct:slackOutput");
from("direct:slackOutput")
.recipientList(simple("slack:#${header.uri}"));
Роут — это описание маршрута передачи сообщений. Характеристиками такого роута являются начальная точка, обозначенная токеном from (в нашем случае это компонент для ActiveMQ) и конечная точка, обозначенная токеном to (компонент для Slack). Apache Camel предоставляет различные компоненты для интеграции (смотри полный список тут camel.apache.org/components).
Настройка компонента activemq задается с помощью URI строки. В нашем случае эта строка составляется при помощи вставки параметров, заданных через файл настроек. Рассмотрим пример полученной URI строки.
from("activemq:queue://slackNotify?username=admin&password=admin")
Это описание входной точки с помощью сгенерированной строки URI. Где activemq — название компонента, а queue — тип канала сообщений, который может быть или очередью (queue), или темой (topic). Далее идёт название канала — slackNotify. Последняя часть URI — параметры конечной точки: username/password — логин и пароль пользователя.
Затем идут несколько конвертеров и сплиттер:
Для интеграции со Slack также используется компонент от Apache Camel. Но возникает проблема: настройки слэк канала нам заранее неизвестны. Узнать их мы можем только из входящего сообщения. Конвертер aggregateJobProcessor формирует часть URI строки с настройками канала и записывает ее в заголовок для того, чтобы затем можно было создать динамический маршрут (Dynamic Router [6])
from("direct:slackOutput")
.recipientList(simple("slack:#${header.uri}"));
Особенность этого маршрута заключается в том, что в нем динамически выбирается конечная точка, а конкретно компонент slack с настройками канала в который будут отправляться сообщения. Для построения маршрута используются данные из самого сообщения (его заголовка), которые достаются с помощью SEL (Simple Expression Language) и выполняются с помощью функции simple(). Шаблон EIP — The Recipient List (Список получателей) позволяет создавать динамические конечные точки.
Пример интеграции продемонстрировал простоту и удобство использования Apache Camel. Мы надеемся, что платформа Job Freelance Scanner будет для кого-то полезной. Также в будущем мы планируем развивать нашу платформу, например добавить Email нотификацию и улучшить UI.
→ Ссылка для использования: jobfreelancescanner.com/ [7]
→ Ссылка на github: github.com/leadex/job-monitor [8]
Автор: leadexsystems
Источник [9]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/java/221685
Ссылки в тексте:
[1] slack: https://slack.com/
[2] Upwork.com: http://upwork.com
[3] Freelancer.com: http://freelancer.com
[4] Guru.com: http://guru.com
[5] jobfreelancescanner.com: http://jobfreelancescanner.com
[6] Dynamic Router: http://camel.apache.org/dynamic-router
[7] jobfreelancescanner.com/: http://jobfreelancescanner.com/
[8] github.com/leadex/job-monitor: http://github.com/leadex/job-monitor
[9] Источник: https://habrahabr.ru/post/317752/?utm_source=habrahabr&utm_medium=rss&utm_campaign=sandbox
Нажмите здесь для печати.