Amalan aplikasi go-zero dan RabbitMQ
Kini semakin banyak perusahaan mula menggunakan model seni bina perkhidmatan mikro, dan dalam seni bina ini, baris gilir mesej telah menjadi kaedah komunikasi yang penting, antaranya RabbitMQ digunakan secara meluas. Dalam bahasa Go, go-zero ialah rangka kerja yang telah muncul dalam beberapa tahun kebelakangan ini. Ia menyediakan banyak alat dan kaedah praktikal untuk membolehkan pembangun menggunakan baris gilir mesej dengan lebih mudah Di bawah ini kami akan memperkenalkan go-zero berdasarkan aplikasi praktikal dan amalan aplikasi RabbitMQ.
1. Gambaran Keseluruhan RabbitMQ
RabbitMQ ialah perisian baris gilir mesej sumber terbuka dan cekap Ia digunakan secara meluas dalam aplikasi peringkat perusahaan, meningkatkan skala sistem aplikasi dan kestabilan. RabbitMQ menggunakan protokol AMQP, yang merupakan spesifikasi yang mentakrifkan mesej operasi, yang membolehkan aplikasi berbeza bertukar maklumat tanpa sekatan bahasa.
Terdapat empat konsep dalam RabbitMQ: pengeluar, pengguna, baris gilir dan suis. Pengeluar ialah penghantar mesej, pengguna ialah penerima mesej, baris gilir adalah bekas penyimpanan mesej, dan suis adalah pusat penghalaan mesej, penghalaan mesej ke baris gilir yang sepadan.
2. Pengenalan kepada go-zero
go-zero ialah rangka kerja mikro berasaskan bahasa go Ia menyediakan banyak alat dan kaedah praktikal untuk memudahkan pembangun mereka bentuk dan membangunkan tinggi. prestasi, aplikasi perkhidmatan mikro kebolehpercayaan tinggi. Rangka kerja go-zero mengguna pakai prinsip reka bentuk yang ringan untuk memudahkan proses pembangunan dan meningkatkan kecekapan pembangunan.
Modul baris gilir mesej dalam go-zero menggunakan RabbitMQ, yang menyediakan sokongan baris gilir mesej yang lengkap, termasuk pengeluar, pengguna, baris gilir dan suis, dsb., membolehkan pembangun menggunakan RabbitMQ dengan cepat dan mudah untuk komunikasi pemesejan. Pada masa yang sama, go-zero juga menyediakan fungsi pengelogannya sendiri, yang boleh mengesan dan menganalisis operasi sistem dengan berkesan.
3. Cara menggunakan go-zero dan RabbitMQ
Di bawah ini kami akan memperkenalkan penggunaan go-zero dan RabbitMQ berdasarkan kes sebenar Kes ini adalah sistem pendaftaran dan log masuk pengguna yang mudah. Apabila pengguna mendaftar, sistem akan menyimpan maklumat pengguna dalam pangkalan data dan menghantar mesej kepada RabbitMQ pada masa yang sama, yang akhirnya akan diserahkan kepada pengguna untuk diproses. Pengguna bertanggungjawab untuk menyimpan maklumat pengguna dalam Redis untuk meningkatkan prestasi sistem.
3.1 Pengeluar
Kami mula-mula menentukan struktur maklumat pengguna untuk menyimpan maklumat pendaftaran pengguna.
type User struct { Name string `json:"name"` Password string `json:"password"` Email string `json:"email"` }
Kemudian, kami mentakrifkan antara muka pengeluar untuk menghantar maklumat pengguna kepada RabbitMQ.
type Producer interface { Publish(ctx context.Context, data []byte) error }
Kami menggunakan pelaksanaan RabbitMQ dalam pustaka "go-zero/messaging" untuk melaksanakan antara muka pengeluar Kod khusus adalah seperti berikut.
import ( "context" "encoding/json" "time" "github.com/gomodule/redigo/redis" "github.com/tal-tech/go-zero/core/logx" "github.com/tal-tech/go-zero/core/stores/cache" "github.com/tal-tech/go-zero/core/stores/redis/redisc" "github.com/tal-tech/go-zero/messaging" "github.com/tal-tech/go-zero/messaging/rabbitmq" ) type mqProducer struct { publisher messaging.Publisher cache cache.Cache } func NewMqProducer(amqpUrl, queueName, exchangeName string) Producer { pub := rabbitmq.NewPublisher(amqpUrl, rabbitmq.ExchangeOption(exchangeName)) cacheConn := redisc.MustNewCache("localhost:6379", "") return &mqProducer{ publisher: pub, cache: cache.NewCache(cacheConn), } } func (producer *mqProducer) Publish(ctx context.Context, data []byte) error { defer producer.cache.Close() user := new(User) err := json.Unmarshal(data, &user) if err != nil { return err } err = producer.cache.Remember(user.Name, func() (interface{}, error) { return user, time.Second*3600 }) if err != nil { logx.Errorf("[Producer]remember cache first:%s", err.Error()) return err } return producer.publisher.Publish(ctx, messaging.Message{ Topic: producer.publisher.GetExchange() + "." + producer.publisher.GetQueue(), Body: data, }) }
Kami menggunakan modul Redis dan Cache dalam pustaka "go-zero/stores" untuk menyimpan maklumat pengguna dalam Redis dan cache maklumat pengguna dalam Cache. Pada masa yang sama, kami menggunakan pelaksanaan RabbitMQ dalam perpustakaan "go-zero/message" untuk menghantar maklumat pengguna kepada RabbitMQ. Fungsi "NewMqProducer" digunakan untuk mencipta contoh pengeluar, dengan "amqpUrl" ialah URL sambungan RabbitMQ, "queueName" ialah nama baris gilir mesej dan "exchangeName" ialah nama suis. Fungsi "Terbitkan" digunakan untuk menghantar maklumat pengguna kepada RabbitMQ.
3.2 Pengguna
Seterusnya, kami mentakrifkan antara muka pengguna untuk menerima mesej daripada RabbitMQ dan menyimpan mesej dalam Redis.
type Consumer interface { Consume(ctx context.Context, handler Handler) error } type Handler func(data []byte) error
Kami menggunakan pelaksanaan RabbitMQ dalam pustaka "go-zero/messaging" untuk melaksanakan antara muka pengguna Kod khusus adalah seperti berikut.
type mqConsumer struct { consumer messaging.Consumer cache cache.Cache } func NewMqConsumer(amqpUrl, queueName, exchangeName, routingKey string) (Consumer, error) { sub := rabbitmq.NewSubscriber(amqpUrl, rabbitmq.ExchangeOption(exchangeName)) err := sub.Subscribe(context.Background(), "", func(msg messaging.Message) error { cacheConn := redisc.MustNewCache("localhost:6379", "") defer cacheConn.Close() user := new(User) err := json.Unmarshal(msg.Body, &user) if err != nil { return err } err = cacheConn.Remember(user.Name, func() (interface{}, error) { return user, time.Second*3600 }) if err != nil { logx.Errorf("[Consumer]remember cache:%s", err.Error()) return err } return nil }, rabbitmq.QueueOption(queueName), rabbitmq.QueueDurable()) if err != nil { return nil, err } return &mqConsumer{ consumer: sub, cache: cache.NewCache(redisc.MustNewCache("localhost:6379", "")), }, nil } func (consumer *mqConsumer) Consume(ctx context.Context, handler Handler) error { return consumer.consumer.StartConsuming(ctx, func(msg messaging.Message) error { return handler(msg.Body) }) }
Kami menggunakan modul Redis dan Cache dalam perpustakaan "go-zero/stores" untuk menyimpan maklumat pengguna dalam Redis. Pada masa yang sama, kami menggunakan pelaksanaan RabbitMQ dalam pustaka "go-zero/message" untuk menerima mesej daripada RabbitMQ. Fungsi "NewMqConsumer" digunakan untuk mencipta contoh pengguna, dengan "amqpUrl" ialah URL sambungan RabbitMQ, "queueName" ialah nama baris gilir mesej, "exchangeName" ialah nama suis dan "routingKey" ialah kekunci penghalaan, digunakan untuk menghalakan mesej ke baris gilir yang ditentukan. Fungsi "Consume" digunakan untuk menerima mesej daripada RabbitMQ dan menghantar mesej ke fungsi pemprosesan mesej "pengendali".
4. Ringkasan
Dalam artikel ini, kami memperkenalkan amalan penggunaan dan aplikasi go-zero dan RabbitMQ berdasarkan contoh aplikasi tertentu. go-zero menyediakan sokongan baris gilir mesej yang lengkap dan boleh menggunakan RabbitMQ dengan cepat dan mudah untuk komunikasi mesej. Pada masa yang sama, modul Redis dan Cache dalam perpustakaan "go-zero/stores" digunakan untuk meningkatkan prestasi sistem ke tahap yang baharu. Dengan populariti dan aplikasi go-zero secara beransur-ansur, saya percaya semakin banyak perusahaan dan pembangun akan menggunakan go-zero dan RabbitMQ untuk membina aplikasi perkhidmatan mikro yang berprestasi tinggi dan boleh dipercayai.
Atas ialah kandungan terperinci Amalan aplikasi go-zero dan RabbitMQ. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Cara membina aplikasi pemesejan yang boleh dipercayai dengan React dan RabbitMQ Pengenalan: Aplikasi moden perlu menyokong pemesejan yang boleh dipercayai untuk mencapai ciri seperti kemas kini masa nyata dan penyegerakan data. React ialah perpustakaan JavaScript yang popular untuk membina antara muka pengguna, manakala RabbitMQ ialah perisian tengah pemesejan yang boleh dipercayai. Artikel ini akan memperkenalkan cara menggabungkan React dan RabbitMQ untuk membina aplikasi pemesejan yang boleh dipercayai dan memberikan contoh kod khusus. Gambaran keseluruhan RabbitMQ:

Cara menggunakan RabbitMQ untuk melaksanakan pemprosesan mesej teragih dalam PHP Pengenalan: Dalam pembangunan aplikasi berskala besar, sistem teragih telah menjadi keperluan biasa. Pemprosesan mesej teragih ialah corak yang meningkatkan kecekapan dan kebolehpercayaan sistem dengan mengagihkan tugas kepada berbilang nod pemprosesan. RabbitMQ ialah sistem baris gilir mesej sumber terbuka yang boleh dipercayai yang menggunakan protokol AMQP untuk melaksanakan penghantaran dan pemprosesan mesej. Dalam artikel ini kami akan membincangkan cara menggunakan RabbitMQ dalam PHP untuk pengedaran

Pengenalan kepada penyelesaian untuk penyegerakan data masa nyata antara Golang dan RabbitMQ: Pada era hari ini, dengan populariti Internet dan pertumbuhan pesat volum data, penyegerakan data masa nyata telah menjadi semakin penting. Untuk menyelesaikan masalah penghantaran data tak segerak dan penyegerakan data, banyak syarikat telah mula menggunakan baris gilir mesej untuk mencapai penyegerakan data masa nyata. Artikel ini akan memperkenalkan penyelesaian penyegerakan data masa nyata berdasarkan Golang dan RabbitMQ dan memberikan contoh kod khusus. 1. Apakah RabbitMQ? Rabbi

Kini semakin banyak perusahaan mula menggunakan model seni bina perkhidmatan mikro, dan dalam seni bina ini, baris gilir mesej telah menjadi kaedah komunikasi yang penting, antaranya RabbitMQ digunakan secara meluas. Dalam bahasa Go, go-zero ialah rangka kerja yang telah muncul dalam beberapa tahun kebelakangan ini. Ia menyediakan banyak alat dan kaedah praktikal untuk membolehkan pembangun menggunakan baris gilir mesej dengan lebih mudah Di bawah ini kami akan memperkenalkan go-zero berdasarkan aplikasi praktikal dan amalan aplikasi RabbitMQ. 1.RabbitMQ Gambaran KeseluruhanArnab

GolangRabbitMQ: Reka bentuk seni bina dan pelaksanaan sistem baris gilir mesej yang sangat tersedia memerlukan contoh kod khusus Pengenalan: Dengan pembangunan berterusan teknologi Internet dan aplikasinya yang meluas, baris gilir mesej telah menjadi bahagian yang amat diperlukan dalam sistem perisian moden. Sebagai alat untuk melaksanakan penyahgandingan, komunikasi tak segerak, pemprosesan toleransi kesalahan dan fungsi lain, baris gilir mesej menyediakan ketersediaan tinggi dan sokongan berskala untuk sistem teragih. Sebagai bahasa pengaturcaraan yang cekap dan ringkas, Golang digunakan secara meluas untuk membina sistem keselarasan tinggi dan berprestasi tinggi.

Go-zero ialah rangka kerja bahasa Go yang sangat baik yang menyediakan set lengkap penyelesaian, termasuk RPC, caching, tugas berjadual dan fungsi lain. Sebenarnya, sangat mudah untuk membina perkhidmatan berprestasi tinggi menggunakan go-zero, malah anda boleh pergi dari pemula kepada mahir dalam beberapa jam. Artikel ini bertujuan untuk memperkenalkan proses membina perkhidmatan berprestasi tinggi menggunakan rangka kerja go-zero dan membantu pembaca memahami dengan cepat konsep teras rangka kerja tersebut. 1. Pemasangan dan konfigurasi Sebelum mula menggunakan go-zero, kita perlu memasangnya dan mengkonfigurasi beberapa persekitaran yang diperlukan. 1

Golang dan RabbitMQ melaksanakan komunikasi tak segerak antara pelbagai perkhidmatan Pengenalan: Dalam seni bina perkhidmatan mikro, komunikasi tak segerak antara pelbagai perkhidmatan adalah keperluan yang sangat biasa. Untuk mencapai gandingan longgar dan pemprosesan konkurensi tinggi antara perkhidmatan, adalah penting untuk memilih baris gilir mesej yang sesuai. Artikel ini akan memperkenalkan cara menggunakan Golang dan RabbitMQ untuk melaksanakan komunikasi tak segerak antara berbilang perkhidmatan dan menyediakan contoh kod khusus. 1. Apakah RabbitMQ? RabbitMQ ialah pemesejan sumber terbuka yang boleh dipercayai dan boleh skala

Gambaran keseluruhan strategi untuk menggunakan RabbitMQ untuk mencapai pengagihan tugas dan pengimbangan beban di Golang: Dalam sistem teragih, pengagihan tugas dan pengimbangan beban adalah sangat penting. Penyelesaian biasa ialah menggunakan baris gilir mesej untuk melaksanakan pengagihan dan pemprosesan tugas. Artikel ini akan memperkenalkan cara menggunakan Golang dan RabbitMQ untuk melaksanakan strategi pengagihan tugas dan pengimbangan beban serta memberikan contoh kod khusus. Pengenalan kepada RabbitMQ: RabbitMQ ialah perisian tengah pemesejan sumber terbuka yang boleh dipercayai, berskala.
