golang操作RabbitMQ--路由模式
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了golang操作RabbitMQ--路由模式,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2482字,纯文字阅读大概需要4分钟。
内容图文
创建连接及RabbitMQ结构体实例代码见 https://www.cnblogs.com/prince5460/p/11895844.html
1.创建路由模式RabbitMQ实例
func NewRabbitMQRouting(exchangeName, routingKey string) *RabbitMQ {
//创建RabbitMQ实例
rabbitmq := NewRabbitMQ("", exchangeName, routingKey)
var err error
//获取connection
rabbitmq.conn, err = amqp.Dial(rabbitmq.Mqurl)
rabbitmq.failOnErr(err, "Failed to connect rabbitmq!")
//获取channel
rabbitmq.channel, err = rabbitmq.conn.Channel()
rabbitmq.failOnErr(err, "Failed to open a channel!")
return rabbitmq
}
2.路由模式发送消息
func (r *RabbitMQ) PublishRouting(message string) {
//1.尝试创建交换机
err := r.channel.ExchangeDeclare(
r.Exchange,
//要改成direct
"direct",
true,
false,
false,
false,
nil,
)
r.failOnErr(err, "Failed to declare an exchange!")
//2.发送消息
err = r.channel.Publish(
r.Exchange,
//要设置
r.key,
false,
false,
amqp.Publishing{
ContentType: "text/plain",
Body: []byte(message),
})
}
3.路由模式接收消息
func (r *RabbitMQ) ReceiveRouting() {
//1.试探性创建交换机
err := r.channel.ExchangeDeclare(
r.Exchange,
//交换机类型
"direct",
true,
false,
//true表示这个exchange不可以被client用来推送消息,仅用来进行exchange和exchange之间的绑定
false,
false,
nil,
)
r.failOnErr(err, "Failed to declare an exchange!")
//2.试探性创建队列,注意队列名称不要写
q, err := r.channel.QueueDeclare(
"", //随机生成队列名称
false,
false,
true,
false,
nil,
)
r.failOnErr(err, "Failed to declare an exchange!")
//3.绑定队列到exchange中
err = r.channel.QueueBind(
q.Name,
//需要绑定key
r.key,
r.Exchange,
false,
nil,
)
//4.消费消息
messages, err := r.channel.Consume(
q.Name,
"",
true,
false,
false,
false,
nil,
)
forever := make(chan bool)
go func() {
for d := range messages {
log.Printf("Received a message :%s", d.Body)
}
}()
fmt.Println("[*] Waiting for messages,To exit press CTRL+C")
<-forever
}
4.测试代码
- Publish
package main
import (
"fmt"
"go-rabbitmq/RabbitMQ"
"strconv"
"time"
)
func main() {
testOne := RabbitMQ.NewRabbitMQRouting("exTest", "test_one")
testTwo := RabbitMQ.NewRabbitMQRouting("exTest", "test_two")
for i := 0; i <= 10; i++ {
testOne.PublishRouting("Hello test one:" + strconv.Itoa(i))
testTwo.PublishRouting("Hello test two:" + strconv.Itoa(i))
time.Sleep(time.Second)
fmt.Println("publish:",i)
}
}
- Receive1
package main
import "go-rabbitmq/RabbitMQ"
func main() {
testOne := RabbitMQ.NewRabbitMQRouting("exTest","test_one")
testOne.ReceiveRouting()
}
- Receive2
package main
import "go-rabbitmq/RabbitMQ"
func main() {
testTwo := RabbitMQ.NewRabbitMQRouting("exTest","test_two")
testTwo.ReceiveRouting()
}
原文:https://www.cnblogs.com/prince5460/p/11895981.html
内容总结
以上是互联网集市为您收集整理的golang操作RabbitMQ--路由模式全部内容,希望文章能够帮你解决golang操作RabbitMQ--路由模式所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。