Upgrade to Pro — share decks privately, control downloads, hide ads and more …

DynamoMQ: Implementing message queueing with Am...

Sponsored · SiteGround - Reliable hosting with speed, security, and support you can count on. →
vvatanabe
February 28, 2024

DynamoMQ: Implementing message queueing with Amazon DynamoDB in Go.

Go言語を用いてDynamoDBをストレージに活用したメッセージキューイングのライブラリ、DynamoMQを開発しました。このライブラリは、Go言語でのコンシューマーおよびプロデューサーの実装を支援するSDKと、管理ツールとして機能するコマンドラインツールを提供します。

このセッションでは、DynamoMQの開発動機、提供する機能、コマンドラインツールやSDKの使用方法、そしてその設計についてご紹介します。

DynamoMQ:https://github.com/vvatanabe/dynamomq/blob/main/README.ja.md

GitHub:https://github.com/vvatanabe
X:https://twitter.com/vvvatanabe

vvatanabe

February 28, 2024

Transcript

13 slides
  1. Introduction to DynamoMQ 株式会社ヌーラボ サービス開発部 Backlog課 Yuichi Watanabe Copyright Nulab

    Inc. All Rights Reserved. DAIMYO Meetup #4 〜 DynamoDBを活用したメッセージキューの実装 〜
  2. DynamoMQが提供するもの ・再配信: メッセージが正常に処理されなかった場合に再配信 ・並行処理: 複数のゴルーチンでメッセージの処理を並行して行う ・デッドレターキュー: 再配信の最大回数を超えたメッセージをDLQに移動する ・グレースフルシャットダウン: コンシューマープロセスのシャットダウン前に処理中の メッセージの完了を待つ

    サポートする機能 ・FIFO: メッセージが送信された順序で処理されることを保証する ・可視性タイムアウト: タイムアウト付きのメッセージの可視時間を設けることで、 複数のコンシューマーによるメッセージの重複受信を防ぐ ・遅延キューイング: コンシューマーへのメッセージの配信を設定した秒数だけ 遅らせる
  3. DynamoMQの使い方 【SDK】クライアントの作成 1. DynamoMQで使用するメッセージの構造体を定義する。 2. AWS SDK for Go v2とDynamoMQから必要なパッケージを

    インポートする。 3. AWSのConfigを読み込み、その設定をNewFromConfig関数に 渡して、DynamoMQクライアントを作成する。 ※型引数でクライアントが取り扱うメッセージの型を指定する ※DynamoDBをDynamoMQとして操作するために必要なメソッドが クライアントに実装されている 1 2 3
  4. DynamoMQの設計 メッセージの状態遷移 READY PROCESSING READY ReceiveMessage() ChangeMessageVisibility() DeleteMessage() MoveMessageToDLQ() SendMessage()

    Failed -> Retry Success Failed queue_type=STANDARD Redrive RedriveMessage() PROCESSING ReceiveMessage() queue_type=DLQ DeleteMessage() Success

More Decks by vvatanabe

Other Decks in Technology