教程集 www.jiaochengji.com
教程集 >  Golang编程  >  golang教程  >  正文 Golang并发操作RabbitMQ

Golang并发操作RabbitMQ

发布时间:2022-03-12   编辑:jiaochengji.com
教程集为您提供Golang并发操作RabbitMQ等资源,欢迎您收藏本站,我们将为您提供最新的Golang并发操作RabbitMQ资源
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"/></svg><h1>send.go</h1>

通过amqp连接RabbitMQ,在通过协程发送信息

<pre><code>package main import ( "github.com/streadway/amqp" "log" "rabbitmqTest/utils" "sync" ) func main() { //TODO 连接地址改为自己主机地址 conn, err := amqp.Dial("amqp://guest:guest@192.168.100.101:5672/") utils.FailOnError(err, "Failed to connect to RabbitMQ") defer conn.Close() ch, err := conn.Channel() utils.FailOnError(err, "Failed to open a channel") defer ch.Close() bodyMap := make(map[string]string) bodyMap["test1"] = "a" bodyMap["test2"] = "b" bodyMap["test3"] = "c" var wg sync.WaitGroup errList := make(chan error, 2 * len(bodyMap)) for name, body := range bodyMap { wg.Add(1) go func(name, body string) { defer wg.Done() q, err := ch.QueueDeclare( name, // name false, // durable false, // delete when unused false, // exclusive false, // no-wait nil, // arguments ) if err != nil { errList <- err return } err = ch.Publish( "", // exchange q.Name, // routing key false, // mandatory false, // immediate amqp.Publishing{ ContentType: "text/plain", Body: []byte(body), }) if err != nil { errList <- err return } log.Printf(" [x] Sent %s", body) }(name, body) } wg.Wait() close(errList) if len(errList) > 0{ for err := range errList { utils.FailOnError(err, "Failed send message") } } } </code></pre> <h1>
recv.go</h1> <pre><code>package main import ( "log" "github.com/streadway/amqp" "rabbitmqTest/utils" "sync" ) func main() { //TODO 连接地址改为自己主机地址 conn, err := amqp.Dial("amqp://guest:guest@192.168.100.101:5672/") utils.FailOnError(err, "Failed to connect to RabbitMQ") defer conn.Close() ch, err := conn.Channel() utils.FailOnError(err, "Failed to open a channel") defer ch.Close() nameList := []string{ "test1", "test2", "test3", } log.Printf(" [*] Waiting for messages. To exit press CTRL C") var wg sync.WaitGroup errList := make(chan error, 2 * len(nameList)) for _, name := range nameList { go func(name string) { q, err := ch.QueueDeclare( name, // name false, // durable false, // delete when unused false, // exclusive false, // no-wait nil, // arguments ) utils.FailOnError(err, "Failed to declare a queue") msgs, err := ch.Consume( q.Name, // queue "", // consumer true, // auto-ack false, // exclusive false, // no-local false, // no-wait nil, // args ) utils.FailOnError(err, "Failed to register a consumer") for d := range msgs { log.Printf("Received a message: %s", d.Body) } }(name) } wg.Wait() close(errList) if len(errList) > 0{ for err := range errList { utils.FailOnError(err, "Failed send message") } } forever := make(chan bool) <-forever } </code></pre> <h1>log.go</h1> <pre><code>package utils import ( "log" ) func FailOnError(err error, msg string) { if err != nil { log.Fatalf("%s: %s", msg, err) } } </code></pre> 到此这篇关于“Golang并发操作RabbitMQ”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!

您可能感兴趣的文章:
Golang并发操作RabbitMQ
什么是RabbitMQ?RabbitMQ的简单介绍
java中RabbitMQ集群使用方法简单介绍
Qutrunk-具有GUI的开源REST / gRPC接口
如何保证消息队列的高可用?
Go 项目最佳实践
golang基础教程
Go 开发关键技术指南 | 为什么你要选择 Go?(内含超全知识大图)
golang-小试牛刀
Golang panic 异常捕获

[关闭]
~ ~