SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Spring Bootで作るマイクロサービス

Spring Bootでバックエンドシステムを作成しよう

Spring Bootで作るマイクロサービス 第6回


  • このエントリーをはてなブックマークに追加

 前回までは、住所録管理を通じて簡単なWebアプリケーションについて説明しました。郵便番号を入力すると住所を自動で入力してほしいなどの要望がありますが、さまざまなサービスを運用していると他のアプリケーションでも同様の要望が上がります。また、マイクロサービスとして小さなサービスを作成する場合、他のシステムから提供されたデータを自分たちのサービス用に加工し、再提供するケースがあります。今回からは、このようなケースを想定し、郵便番号から住所情報を提供するサンプルアプリケーションを通じてバックエンドでのデータ管理などの方法を紹介します。

  • このエントリーをはてなブックマークに追加

サンプルアプリケーションの概要

 サンプルアプリケーションでは、図1に示すようなバックエンドでのデータ管理と郵便番号から住所データを提供するような簡単なアプリケーションです。今回は、バックエンドでのデータ管理について説明します。

図1:サンプルアプリケーションのイメージ
図1:サンプルアプリケーションのイメージ

 このアプリケーションでは、表1のデータ登録方法を提供します。

表1:データの登録方法
手法 概要  
ファイルアップロード HTTPでのファイルアップロードからデータを取り込む機能
データ受信 FTPやSCPなど指定したフォルダ内のファイルを取り込む機能
データ取得 外部WEBサイトからデータを取得し自動で取り込む機能

Apache Camel

 今回のサンプルアプリケーションはApache Camelを使ってデータ処理を行っています。

 Apache Camelは図1のように、さまざまなデータの入出力を行うコンポーネントを組み合わせることで、開発者がデータ操作に集中できるフレームワークです。

 用意されている入出力コンポーネントはApache Camelのサイトの通り、非常に多くあるのがわかります。自分で独自の入出力コンポーネントを作成することもでき、特殊な入出力に対応することも可能です。

 こういったフレームワークはEIP(Enterprise Integration Patterns)フレームワークと呼ばれていて、同様なフレームワークにはSpring Integrationがあります。EIPフレームワークという言葉に慣れていなくても、EAI(Enterprise Application Integration)製品という言葉なら知っている方もいると思います。

 EIPフレームワークはEAI製品が行っている処理と同様のことができます。また、一部のEAI商用製品では内部のシステムとしてApache Camelを使っているケースなどもあります。

図2:Apache Camelのイメージ
図2:Apache Camelのイメージ

Spring BootでのApache Camelの利用

 Spring BootでApache Camelを使うとき、Gradleの場合には、リスト1のように「org.apache.camel:camel-spring-boot-starter」というスターターを追加します。

[リスト1]Spring Camelのスターター指定(build.gradleの抜粋)
dependencies {
    : // (省略)
    implementation 'org.apache.camel:camel-spring-boot-starter:2.24.1'
}

処理ルールの記述方法

 Apache Camelの処理ルールは、図3のようにRouteBuilderクラスを継承したクラスをBean登録すると自動的に動作するようになります。

図3:Apache Camelの処理ルールの記述
図3:Apache Camelの処理ルールの記述

 実際の処理内容の説明は後述しますが、処理ルールはリスト2のような流れで記述します。

[リスト2]Apache Camelでの処理定義(src/main/java/com/coltware/springboot/zipcode/camel/ZipcodeImportRouteBuilder.javaの抜粋)
import org.apache.camel.builder.RouteBuilder;
: (省略)
@Component
public class ZipcodeImportRouteBuilder extends RouteBuilder {

    //  (1) 定義を宣言する設定
    @Override
    public void configure() throws Exception {
        // (2) 処理ルートを定義する
        from("file://" + file.getAbsolutePath() + File.pathSeparator + "import").process(new Processor() {
            @Override
            public void process(Exchange exchange) throws Exception {
                // ファイルが存在したときの処理を記述
            }
        }).to("direct:import");
        //  (3) ルートは複数指定できる
        from("direct:import").process(new Processor() {
           // (省略)
        });
    }
}

 (1)のconfigureメソッド内に処理の流れを宣言します。(2)と(3)のように複数の処理の流れを宣言することも可能です。from()メソッドはデータの入力元を示し、process()メソッド内でデータ処理を記述します。最後のtoで出力先を指定します。(2)の出力を(3)での入力として利用しています。これらの流れを図にすると、図4になります。

図4:Apache Camelのルート定義
図4:Apache Camelのルート定義

 ルート定義の方法には、ここで紹介した以外にもデータの分岐やフィルタ処理など、多彩な記述が行えます。また、Java以外のXML等など記述方法もいろいろあるので、詳しくはApache Camelの利用マニュアルを見てください。

会員登録無料すると、続きをお読みいただけます

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

次のページ
バックエンドでのデータ管理

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
Spring Bootで作るマイクロサービス連載記事一覧

もっと読む

この記事の著者

WINGSプロジェクト 小林 昌弘(コバヤシ マサヒロ)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/11673 2020/06/01 19:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング