rabbitmq_client

package module
v1.0.3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 12, 2022 License: MIT Imports: 9 Imported by: 0

README

rabbitmq-golang-client

rabbitmq-golang-client は、RabbitMQ に接続し、メッセージを送受信するためのシンプルな、Golang ランタイム のための ライブラリです。
本ライブラリのインストールは、各システム環境やエッジコンピューティングデバイス内におけるランタイムの特性に応じて、必要に応じて行ってください。

動作環境

  • OS: Linux
  • CPU: ARM/AMD/Intel
  • Golang Runtime

導入方法

go get でインストールしてください。

go get "github.com/latonaio/rabbitmq-golang-client"

使用方法

ライブラリの初期化

import 文を追加します。

import rabbitmq "github.com/latonaio/rabbitmq-golang-client"

rabbitmq.NewRabbitmqClient("<URL>", []string{"<受信するキュー名>"...}, []string{"<送信するキュー名>"...}) でクライアントを作成します。

指定するキューは事前に存在している必要があります。存在しない場合は例外が発生します。

例:

client, err := rabbitmq.NewRabbitmqClient(
	"amqp://username:password@hostname:5672/virtualhost",
	[]string{"queue_origin"},
	[]string{"queue_to"}
)
if err != nil {
	// エラー
	log.Println("ERROR")
	return
}

// 受信を終了する
defer client.Close()
キューからメッセージを受信

次のようなループでメッセージを処理します。

メッセージの処理が終わったあと、必ず結果を通知するメソッド (message.Success(), message.Fail() または message.Requeue()) をコールしてください。Success() の場合はキューからそのメッセージが正常に削除され、Fail() の場合はそのメッセージがデッドレターに送られます (設定されている場合) 。

(何らかの理由で再度メッセージをキューに戻したいときは、message.Requeue() をコールしてください。)

message.QueueName() で受け取り元キューの名前が、message.Data() に受信したデータを受け取れます。

例:

iter, err := client.Iterator()
if err != nil {
	// エラー
	log.Println("ERROR")
	return
}
// 受信を終了する際には Stop を呼ぶ
defer client.Stop()

for message := range iter {
	// 何らかの理由でメッセージを後から再処理したいとき等、
	// 再度キューに戻すときは、message.Requeue() を実行する

	// 何らかの処理
	log.Println("received from: %v", message.QueueName())
	log.Println("data: %v", message.Data())

	// 処理成功
	message.Success()

	// 処理失敗時
	// メッセージがデッドレターという別のキューに入る (定義されている場合)
	// message.Fail()
}
メッセージを送信する

client.Send("<送信先キュー名>", <データ>) のように呼び出してください。<データ> には map[string]interface{} を渡します。

例:

payload := map[string]interface{}{
	"hello": "world"
}
if err := client.Send("queue_to", payload); err != nil {
	log.Printf("error: %v", err)
}

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type RabbitmqClient

type RabbitmqClient struct {
	// contains filtered or unexported fields
}

func NewRabbitmqClient

func NewRabbitmqClient(url string, queueFrom, queueTo []string) (*RabbitmqClient, error)

rabbitmq に接続してクライアントを作る

func (*RabbitmqClient) AddSendTemp added in v1.0.3

func (r *RabbitmqClient) AddSendTemp(payload map[string]interface{})

func (*RabbitmqClient) Close

func (r *RabbitmqClient) Close() error

func (*RabbitmqClient) DeleteSendTemp added in v1.0.3

func (r *RabbitmqClient) DeleteSendTemp()

func (*RabbitmqClient) Fail

func (r *RabbitmqClient) Fail(tag uint64) error

func (*RabbitmqClient) Iterator

func (r *RabbitmqClient) Iterator() (<-chan RabbitmqMessage, error)

func (*RabbitmqClient) Requeue

func (r *RabbitmqClient) Requeue(tag uint64) error

func (*RabbitmqClient) Send

func (r *RabbitmqClient) Send(sendQueue string, payload map[string]interface{}) error

func (*RabbitmqClient) Stop

func (r *RabbitmqClient) Stop() error

func (*RabbitmqClient) Success

func (r *RabbitmqClient) Success(tag uint64) error

type RabbitmqMessage

type RabbitmqMessage struct {
	// contains filtered or unexported fields
}

func NewRabbitmqMessage

func NewRabbitmqMessage(d amqp.Delivery, client *RabbitmqClient) (RabbitmqMessage, error)

func (*RabbitmqMessage) Data

func (rm *RabbitmqMessage) Data() map[string]interface{}

func (*RabbitmqMessage) Fail

func (r *RabbitmqMessage) Fail() error

func (*RabbitmqMessage) IsResponded

func (r *RabbitmqMessage) IsResponded() bool

func (*RabbitmqMessage) QueueName

func (rm *RabbitmqMessage) QueueName() string

func (*RabbitmqMessage) Requeue

func (r *RabbitmqMessage) Requeue() error

func (*RabbitmqMessage) Success

func (r *RabbitmqMessage) Success() error

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL