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

DynamoMQ: Implementing message queueing with Am...

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
Tweet

More Decks by vvatanabe

Other Decks in Technology

Transcript

  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