栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Go语言

Golang 实现 rabbitMq 和生产消费

Go语言 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Golang 实现 rabbitMq 和生产消费

订阅者-》channel创建者-》消费者


package main

import (
"log"
"github.com/streadway/amqp"
)

func failOnError(err error, msg string) {
	if err != nil {
		log.Fatalf("%s: %s", msg, err)
	}
}


func main() {
	conn, err := amqp.Dial("amqp://guest:guest@localhost:5672/")
	failOnError(err, "Failed to connect to RabbitMQ")
	defer conn.Close()

	ch, err := conn.Channel()
	failOnError(err, "Failed to open a channel")
	defer ch.Close()

	//链接到队列 没有则创建
	ch.QueueDeclare(
		"woshiqueue", // 队列名称
		false,   // 是否持久化
		false,   // 是否自动删除 至少有一个链接 都断开才会删除
		false,   //是否排他
		false,   // no-wait
		nil,     // arguments
	)
	failOnError(err, "Failed to declare a queue")

	//消费队列
	msgs, err := ch.Consume(
		"woshiqueue", // 队列名称
		"",     // 消费者名字
		true,   // 收到消息后,是否不需要回复确认即被认为被消费
		false,  // 排他消费者,即这个队列只能由一个消费者消费.适用于任务不允许进行并发处理的情况下.比如系统对接
		false,  //无用
		false,  // 不返回执行结果,但是如果排他开启的话,则必须需要等待结果的,如果两个一起开就会报错
		nil,    // 其他参数
	)
	failOnError(err, "Failed to register a consumer")

	forever := make(chan bool)

	go func() {
		for d := range msgs {
			log.Printf("Received a message: %s", d.Body)
		}
	}()

	log.Printf(" [*] Waiting for messages. To exit press CTRL+C")
	<-forever
}

生产者-》发布

package main

import (
	"github.com/streadway/amqp"
	"log"
)

func failOnError(err error, msg string) {
	if err != nil {
		log.Fatalf("%s: %s", msg, err)
	}
}



func main() {
	conn, err := amqp.Dial("amqp://guest:guest@localhost:5672/")
	failOnError(err, "Failed to connect to RabbitMQ")
	defer conn.Close()

	ch, err := conn.Channel()
	failOnError(err, "Failed to open a channel")
	defer ch.Close()

	//链接到队列 没有则创建
	ch.QueueDeclare(
		"woshiqueue", // 队列名称
		false,   // 是否持久化
		false,   // 是否自动删除 至少有一个链接 都断开才会删除
		false,   //是否排他
		false,   // no-wait
		nil,     // arguments
	)
	failOnError(err, "Failed to declare a queue")

	body := "Hello World!"
	err = ch.Publish(
		"",     // 交换机
		"woshiqueue", // channel
		false,  // mandatory
		
		false,  // immediate
		
		amqp.Publishing{
			ContentType: "text/plain",
			Body:        []byte(body),
		})
	log.Printf(" [x] Sent %s", body)
	failOnError(err, "Failed to publish a message")
}

需要安装rabbitMq 服务具体查看安装详情->windos 安装rabbitmqhttps://mp.csdn.net/mp_blog/creation/editor/122492640

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/904860.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号