質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
gRPC

gRPCは、グーグル社が開発した通信プロトコルの一つ。Protocol Buffersを用いてシリアライズしバイナリに変換させるため、高速なRPCを実現することができます。また、プログラマは意識せずにHTTP/2を利用できることも特徴です。

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

Q&A

1回答

1186閲覧

Grpcサーバー実行中に外部APIを定期実行

goo7

総合スコア0

gRPC

gRPCは、グーグル社が開発した通信プロトコルの一つ。Protocol Buffersを用いてシリアライズしバイナリに変換させるため、高速なRPCを実現することができます。また、プログラマは意識せずにHTTP/2を利用できることも特徴です。

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

0グッド

0クリップ

投稿2021/11/30 05:34

Golang+dockerでgRPCサーバーを構築しています。

今のシステムではgRPCサーバー実行中に定期的に外部APIを実行する必要があります。

クライアントから定期実行することはできるのですが、今回のケースはクライアントが接続されてなくてもサーバー側単独で外部APIを定期実行する必要があります。

具体的にはgrpc.NewServer()後にServでgRPCサーバー起動した後に定期実行が必要です。

gRPCサーバー起動後に定期実行する場合、どういった対処方法が良いか教えていただけると助かります。

宜しくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

以下のようなgoroutineを起動するのはどうでしょうか?
https://go.dev/play/p/mVTDCEva9wj

package main import ( "context" "fmt" "time" ) func cron(ctx context.Context) { tick := time.NewTicker(1 * time.Second) for { select { case <-tick.C: // TODO: implement call api task fmt.Println("task") case <-ctx.Done(): return } } } func main() { ctx, cancel := context.WithCancel(context.Background()) defer cancel() go cron(ctx) // TODO: start server time.Sleep(20 * time.Second) }

投稿2021/12/04 01:05

nobonobo

総合スコア3367

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問