0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

gRPCを使ってあそんでみる サービス起動編

Last updated at Posted at 2022-10-19

gRPCを使ってあそんでみるの目的

ログデータを永続化するgRPCサービスを立ち上げログを記録する。

今回のお題

ログを記録するgRPCサービスを構築し起動する。

■事前環境

・Windows10 バージョン21H2
・IntelliJ IDEA 2022.1.4(Community Edition)
・OpenJDK Runtime Environment Zulu17.36+17-CA (build 17.0.4.1+1-LTS)
・Gradle

1.IDLのクラスをプロジェクトに追加

環境構築編の続きとなります。
生成されたIDLクラスをプロジェクトに追加します。

build.gradleの必要箇所を抜粋
sourceSets {
    main {
        java {
            srcDirs 'build/generated/source/proto/main/grpc'
            srcDirs 'build/generated/source/proto/main/java'
        }
    }
}

2.サービスクラスを実装

リクエストされた、ステータスとメッセージをログに書き込むサービスになります。
サーバにサービスとして登録することで利用できるようになります。
サービスは環境構築編でProtoファイルに記載したパッケージ名、サービス名の組合わせで生成される〇〇〇ImpBaseをimplementsして実装します。
[java_packag].[サービス名]Grpc.LoggingImplBase

ソース詳細
package logging;

import io.grpc.stub.StreamObserver;
import java.util.logging.FileHandler;
import java.util.logging.Logger;
import java.util.logging.SimpleFormatter;
import logging.proto.Logging;
import logging.proto.LoggingServiceGrpc;

public class LoggingService extends LoggingServiceGrpc.LoggingServiceImplBase {

    private final Logger logger;

    LoggingService(final String path) {
        this.logger = Logger.getLogger(LoggingService.class.getName());
        try {
            FileHandler fileHandler = new FileHandler(path);
            fileHandler.setFormatter(new SimpleFormatter());
            this.logger.addHandler(fileHandler);
        }catch(Exception e){
            System.out.println(e.toString());
        }
    }

    @Override
    public void write(Logging.LoggingRequest request, StreamObserver<Logging.LoggingResponse> responseObserver) {
        Logging.LoggingResponse loggingResponse = Logging.LoggingResponse.newBuilder().setStatus("OK").build();
        // ログへメッセージの書き込み
        this.logger.info(request.getMessage());
        responseObserver.onNext(loggingResponse);
        responseObserver.onCompleted();
    }
}

3.サーバ起動クラスを作成

ポート8080で待ち受けしd:\server.logにログを出力するようにしてます。
addServiceにてサーバに2で作成したサービスを登録しています。

package logging;

import io.grpc.Server;
import io.grpc.ServerBuilder;

import java.io.IOException;

public class ServerMain {

    public static void main(String[] args) throws IOException, InterruptedException {
        final String path = "d:\\server.log";
        final int port = 8080;
        Server server = ServerBuilder.forPort(port)
                .addService(new LoggingService(path))
                .build();

        server.start();
        System.out.println("start server on port:" + port);
        server.awaitTermination();
    }
}

4.サービスを実行

ServerMainクラスを実行します。
8080ポートで待ち受け実行されます。

> Task :ServerMain.main()
start server on port:8080

参考

今回、利用したソース一式です。
https://github.com/shigemax999/sample-grpc-logging

次回

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?