見出し画像

超実践的LINE BOT開発の手引き(コード解説編その1 App Engine Task Queue APIの世界)

もう少し時間が空いたので書きます。

こちらのノートでも書きましたが、下記リンク先指摘の通り、その辺りに転がっているLINE BOT用のサンプルコードをそのまま使うと必ず障害が起きます。また、LINE社にも迷惑をかけます。

大量メッセージが来ても安心なLINE BOTサーバのアーキテクチャ

解決策としては上記リンク内にあるように「Queue(RabbitMQとか)やメモリDB(memcachedやRedisなど)といった「軽いストレージ」に入れて」という手法が有効なのですが、例えば、RabbitMQの運用ってどうすればいいのとググったら絶望の深淵を覗きこむこととなります。

はじめての RabbitMQ

上記リンクのエントリが書かれたのは2012年と若干古いので、現在では多少は簡便化されているかとは思うのですが、基本はRabbitMQ用のサーバ群を冗長構成で運用するということで変わらないと思います。

はっきり言って、非エンジニアやエンジニアであってもカジュアルにLINE BOTに手を出してみようという用途には向いていません。

Google App EngineにはTask QueueというQueueの仕組みが備わっており、こちらも驚異的に平易に利用できます。

こちらのリンク先のコードが該当するのですが、基本的にパラメータを設定して、予め実装しておいたURLにRequestを投げるだけです。

受け手側の実装は以下のとおりで通常のHTTPリクエストを処理する仕組みと全く同じです。

勘のいい人であれば、セキュリティ的な問題を心配されると思いますが、こちらのリンク部分のように設定すれば、外部からのアクセスを遮断できます。

ちなみにTask Queueとは要はタスクを貯めておいて一定の間隔で順番に処理していくという仕組みです。

その処理のタイミングなどのポリシーもApp Engineではqueue.yamlというファイルを編集することで容易に設定できます。

こちらのリンクにqueue.yamlで設定可能な事項の詳細な説明があります。

Task Queueは処理に失敗するとリトライする機構やトランザクションの仕組みも備わっています。
(コードの品質が低いとリトライ機構は諸刃の剣となるので要注意ですが)

とここまで書いておいて、クッソハイブロウ過ぎね?#TaskQueueなんてタグ、note上で誰が踏むねん?という疑問も湧いてこなくはないのですが、間違いなく地頭がよければ理解できる内容なので、一人でも試してくれる人が出てくればいいなあと思います。



この記事が気に入ったらサポートをしてみませんか?