当社は統合ソリューションの開発に従事しており、この分野での提案を定期的に見つける必要があります。 したがって、タスクが形成されました。大規模なサイトからの仕事のオファーを監視するためのプラットフォームを開発することです。 プラットフォームは、いくつかのキーワードを含むオファーを追跡し、それらをスラックチャンネルで公開する必要があります。
アプリケーションを実装してローカルで実行した後、コミュニティに公開し、使用のための無料アクセスを提供し、ソースを公開することにしました。 その結果、ジョブフリーランススキャナープラットフォームを紹介します。
特徴
Job Freelance Scannerは、Leadex Systemsが開発した大規模なグローバルジョブサイトからの求人を監視するためのプラットフォームです。 このプラットフォームを使用すると、次のようなサイトから通信チャネル(Slack)への単一のストリームでオファーを受信できます。
新しい求人に関するメッセージは公開後できるだけ早く受信されます。これにより、新しい提案を監視し、最初の提案の1つに応答できます。 スラックチャネルでの求人メッセージの例:
カスタマイズ
プラットフォームの使用を開始するには、以下を行う必要があります。
- リンクjobfreelancescanner.comに従ってください。
- GoogleまたはLinkedInアカウントでログインします
- 対応するサイトからの求人を監視するために使用される検索クエリ(キーワード)を入力します。
- 次のタブで、スラック通知の設定を変更します。
- できた。 指定されたチャネルでは、スラックオファーが低下し始めます。
建築
この問題を解決するために、次のアーキテクチャが開発されました。一定期間後、内部APIを使用して、目的のサイトからの求人をキーワードで検索します。 既に公開され、署名済みの顧客に送信されているものを除外します。
凡例:
図からわかるように、プロジェクトはいくつかの独立したモジュールで構成されています。 アプリケーションモジュール間で通信するために、Apache ActiveMQはメッセージブローカーとして使用され、MongoDBはクライアント設定を保存します。 Apache Camelは、ソリューションのモジュールを統合するために使用されます。
Apache Camelを使用したSlackとActiveMQの統合例
求人をSlackのメッセージに変換し、Apache Camelのslackコンポーネントの統合を使用して送信するモジュールを詳しく見てみましょう。 このコンポーネントは、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}"));
ルートは、メッセージ転送ルートの説明です。 このようなルートの特性は、トークン(この例ではActiveMQのコンポーネント)で示される開始点と、トークン(スラックのコンポーネント)で示される終了点です。 Apache Camelは、統合用のさまざまなコンポーネントを提供します(詳細なリストはcamel.apache.org/componentsを参照)。
activemqコンポーネントは、文字列URIを使用して構成されます。 この場合、この行は、設定ファイルで指定されたパラメーターを挿入することでコンパイルされます。 受信した文字列URIの例を考えてみましょう。
from("activemq:queue://slackNotify?username=admin&password=admin")
これは、生成されたURI文字列を使用したエントリポイントの説明です。 activemqはコンポーネントの名前で、queueはメッセージチャネルのタイプで、キューまたはトピックのいずれかです。 次に、チャネルの名前slackNotifyが来ます。 URIの最後の部分は、エンドポイントパラメーターです。ユーザー名/パスワード-ユーザーのユーザー名とパスワード。
次に、いくつかのコンバーターとスプリッターがあります。
- jsonToPojoProcessor-入力JSON形式メッセージの内部通知データモデルへの変換(モデルには、ジョブオファーのリストとスラックの設定が含まれます)。 変換には、Google Gsonライブラリが使用されます。これにより、JSONをJavaオブジェクトに、またはその逆に変換できます。
- aggregateJobProcessor-通知データモデルから一連の求人への変換。 スラックチャネル設定もヘッダーに書き込まれます。
- split(body()) -求人の入力配列を個別のストリームに分割します。
- jobToSlackMessageProcessor-求人をスラックチャネルのメッセージに変換します。
Slackとの統合には、Apache Camelのコンポーネントも使用されます。 しかし、問題が発生します。スラックチャネルの設定は事前に不明です。 着信メッセージからのみそれらを学ぶことができます。 aggregateJobProcessorコンバーターは、チャネル設定を含む行のURIの一部を形成し、ヘッダーに書き込みます。これにより、動的ルート( Dynamic Router )を作成できます
from("direct:slackOutput") .recipientList(simple("slack:#${header.uri}"));
このルートの特徴は、エンドポイント、特にメッセージの送信先となるチャネルの設定を持つスラックコンポーネントを動的に選択することです。 ルートを構築するために、SEL(Simple Expression Language)を使用して取得され、simple()関数を使用して実行されるメッセージ自体(ヘッダー)からのデータが使用されます。 EIP-受信者リストテンプレートを使用すると、動的なエンドポイントを作成できます。
おわりに
統合例は、Apache Camelのシンプルさと使いやすさを実証しました。 Job Freelance Scannerプラットフォームが誰かに役立つことを願っています 。 また、将来的には、たとえば電子メール通知の追加やUIの改善など、プラットフォームの開発を計画しています。
参照:
→使用するリンク: jobfreelancescanner.com/
→githubへのリンク: github.com/leadex/job-monitor