ホームページ >バックエンド開発 >Golang >Golang と RabbitMQ を使用したメッセージ永続性とデータ セキュリティの設計と実装

Golang と RabbitMQ を使用したメッセージ永続性とデータ セキュリティの設計と実装

WBOY
WBOYオリジナル
2023-09-28 16:45:451350ブラウズ

Golang と RabbitMQ を使用したメッセージ永続性とデータ セキュリティの設計と実装

Golang と RabbitMQ は、メッセージの永続性とデータ セキュリティの設計と実装を実装します。特定のコード例が必要です。


はじめに:

分散システムでは、メッセージ キューが使用されます。一般的に使用される通信モード。 RabbitMQ は、オープン ソースの AMQP (Advanced Message Queuing Protocol) メッセージ ブローカーとして、その安定性と信頼性により、さまざまなアプリケーション シナリオで広く使用されています。この記事では、Golang プログラミング言語と RabbitMQ を使用して、メッセージの永続性とデータ セキュリティの設計と実装を実現します。

1. Golang と RabbitMQ 間の接続

まず、Golang を使用して RabbitMQ に接続し、永続的なメッセージ キューを作成する必要があります。 <pre class='brush:php;toolbar:false;'>package main import ( &quot;log&quot; &quot;github.com/streadway/amqp&quot; ) func failOnError(err error, msg string) { if err != nil { log.Fatalf(&quot;%s: %s&quot;, msg, err) } } func main() { conn, err := amqp.Dial(&quot;amqp://guest:guest@localhost:5672/&quot;) failOnError(err, &quot;Failed to connect to RabbitMQ&quot;) defer conn.Close() ch, err := conn.Channel() failOnError(err, &quot;Failed to open a channel&quot;) defer ch.Close() q, err := ch.QueueDeclare( &quot;my_queue&quot;, // queue name true, // durable false, // delete when unused false, // exclusive false, // no-wait nil, // arguments ) failOnError(err, &quot;Failed to declare a queue&quot;) }</pre>上記のコードでは、amqp.Dial() 関数を通じて RabbitMQ に接続し、

amqp.Dial()

関数キューを使用して永続メッセージを作成します。

2. メッセージの永続性

次に、メッセージを送受信することでメッセージの永続性を実現します。

メッセージを送信するコードは次のとおりです。 <pre class='brush:php;toolbar:false;'>// ... err = ch.Publish( &quot;&quot;, // exchange q.Name, // routing key false, // mandatory false, // immediate amqp.Publishing{ ContentType: &quot;text/plain&quot;, Body: []byte(&quot;Hello, RabbitMQ!&quot;), DeliveryMode: amqp.Persistent, // make message persistent }) failOnError(err, &quot;Failed to publish a message&quot;)</pre>

amqp.Persistent

フラグを設定することで、RabbitMQ の再起動時にメッセージを永続化できます。

メッセージを受信するコードは次のとおりです: <pre class='brush:php;toolbar:false;'>// ... msg, err := ch.Consume( q.Name, // queue name &quot;&quot;, // consumer true, // auto-ack false, // exclusive false, // no-local false, // no-wait nil, // arguments ) failOnError(err, &quot;Failed to register a consumer&quot;) go func() { for d := range msg { log.Printf(&quot;Received a message: %s&quot;, d.Body) } }() select {}</pre>上記のコードでは、auto-ack パラメーターを に設定することで受信を自動的に確認します。 true メッセージを取得し、

msg

チャネルを通過してメッセージを取得します。

3. データ セキュリティ

データ セキュリティを確保するために、TLS (Transport Layer Security) を使用して RabbitMQ との接続を暗号化できます。

まず、証明書と秘密キーを生成する必要があります。次のコマンドを使用して生成できます。

openssl req -new -newkey rsa:2048 -days 365 -nodes -x509 -keyout server.key -out server.crt

証明書と秘密キーを作成した後、次のコード スニペットを使用して RabbitMQ に接続できます。 <pre class='brush:php;toolbar:false;'>// ... cert, err := tls.LoadX509KeyPair(&quot;server.crt&quot;, &quot;server.key&quot;) failOnError(err, &quot;Failed to load certificates&quot;) config := &amp;tls.Config{ Certificates: []tls.Certificate{cert}, } conn, err := amqp.DialTLS(&quot;amqps://guest:guest@localhost:5671/&quot;, config) failOnError(err, &quot;Failed to connect to RabbitMQ&quot;) defer conn.Close() // ...</pre>

amqp を設定します。 DialTLS()

を使用して RabbitMQ に接続し、TLS 構成を渡します。

結論:

Golang プログラミング言語と RabbitMQ を使用することで、メッセージの永続性とデータのセキュリティを実現できます。永続化フラグを設定すると、RabbitMQ の再起動時にメッセージが残り、データのセキュリティを確保するために TLS を使用して接続が暗号化されます。上記のサンプル コードを通じて、Golang と RabbitMQ を使用してメッセージの永続性とデータ セキュリティの設計と実装を実装する方法を理解できます。

###上記は、Golang と RabbitMQ を使用したメッセージ永続性とデータ セキュリティの設計と実装に関する記事です。 ###

以上がGolang と RabbitMQ を使用したメッセージ永続性とデータ セキュリティの設計と実装の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。