golang メッセージミドルウェアをどのように実装しますか
Go言語では、メッセージングと処理を実現するための様々なメッセージングミドルウェアを使用できます。以下に一般的なメッセージングミドルウェアの実装方法をいくつか示します。
- Redisは、高速なキーバリューストアデータベースですが、メッセージミドルウェアとしても使用できます。Redis の Pub/Sub 機能を使用してメッセージの発行と購読を行えます。発行者は指定したチャンネルにメッセージを発行でき、購読者は関心のあるチャンネルを購読してメッセージを受け取ります。
- ネイティブな日本語で言い換えてください。オプションは 1 つだけで結構です。サンプルコード:
- conn := redis.NewClient(&redis.Options{
Addr: “localhost:6379”,
Password: “”,
DB: 0,
})err := conn.Publish(“my-channel”, “Hello, World!”).Err()
if err != nil {
panic(err)
}// 購読者
pubsub := conn.Subscribe(“my-channel”)
_, err = pubsub.Receive()
if err != nil {
panic(err)
}ch := pubsub.Channel()
for msg := range ch {
fmt.Println(msg.Channel, msg.Payload)
} - RabbitMQ:RabbitMQ は多様なメッセージ配信モード(ポイントツーポイント、パブリッシュ/サブスクライブ、ワーカキューなど)をサポートする機能豊富なオープンソースのメッセージミドルウェアです。RabbitMQ の Go クライアントライブラリを使用すれば、メッセージを送信および受信できます。
- このサンプルコードは大変よくできました
- 送信側
“`go
conn, err := amqp.Dial(“amqp://guest:guest@localhost:5672/”)
if err != nil {
panic(err)
}
defer conn.Close()ch, err := conn.Channel()
if err != nil {
panic(err)
}
defer ch.Close()q, err := ch.QueueDeclare(
“my-queue”, // キュー名
false, // 耐久性
false, // 自動削除
false, // 排他
false, // ノンブロッキング
nil, // オプション
)
if err != nil {
panic(err)
}err = ch.Publish(
“”, // エクスチェンジ名
q.Name, // ラウターキー
false, // 強制(キューにバインドされていない場合、エラーを返す)
false, // 即時(キューにルーティングできない場合、エラーを返す)
amqp.Publishing{
ContentType: “text/plain”,
Body: []byte(“Hello, World!”),
},
)
if err != nil {
panic(err)
}// 受信側
conn, err := amqp.Dial(“amqp://guest:guest@localhost:5672/”)
if err != nil {
panic(err)
}
defer conn.Close()ch, err := conn.Channel()
if err != nil {
panic(err)
}
defer ch.Close()q, err := ch.QueueDeclare(
“my-queue”, // キュー名
false, // 耐久性
false, // 自動削除
false, // 排他
false, // ノンブロッキング
nil, // オプション
)
if err != nil {
panic(err)
}msgs, err := ch.Consume(
q.Name, // キュー名
“”, // コンシューマータグ(複数のコンシューマーを区別するために使用)
true, // 自動ACK
false, // 排他
false, // ノンブロッキング
false, // キューにメッセージがあるまで待機
nil, // オプション
)
if err != nil {
panic(err)
}for msg := range msgs {
fmt.Println(string(msg.Body))
}
“` - NATS: NATS は軽量高パフォーマンスのメッセージシステムで、パブリッシュ(Pub)/サブスクライブ(Sub)やリクエスト/レスポンスのスタイルをサポートしています。NATS の Go クライアントライブラリを使用してメッセージの送信と受信を行います。
- 本当にごめんね **ご迷惑**を **かけて**しまいました
- var nc *nats.Conn
var err error
if nc, err = nats.Connect(nats.DefaultURL); err != nil {
panic(err)