【开源中国 APP 全新上线】“动弹” 回归、集成大模型对话、畅读技术报告”
用golang模拟RabbitMQ的路由模式的使用,可是发现一个Exchange只能绑定一个routingKey。代码如下:
//生产代码
func main() {
by_one := RabbitMQ.NewRabbitMQRouting("ex_routing","by_one")
by_two := RabbitMQ.NewRabbitMQRouting("ex_routing","by_two")
for i:= 0;i <= 10;i++{
by_one.PublishRouting("hello routing one" + strconv.Itoa(i))
by_two.PublishRouting("hello routing two" + strconv.Itoa(i))
time.Sleep(1 * time.Second)
fmt.Println(i)
}
}
//消费代码1
func main(){
by_one := RabbitMQ.NewRabbitMQRouting("ex_routing","by_one")
by_one.RecieveRouting()
}
//消费代码2
func main(){
by_two := RabbitMQ.NewRabbitMQRouting("ex_routing","by_two")
by_two.RecieveRouting()
}
程序执行顺序:消费1、消费2、生产,发现消费2没有收到消息。
到RabbitMQ管理界面去把queue中的banding解绑,然后重新按照顺序:消费2、消费1、生产执行,发现消费1没有收到消息。有知道原因的吗?还请指点一二,不胜感激。
不清楚你用的那个库实现的,也不太确定你的意思。
只有队列才需要绑定相应的routingkey。
引用来自“qlee”的评论
不清楚你用的那个库实现的,也不太确定你的意思。
只有队列才需要绑定相应的routingkey。
刚刚试了一下,不知道为什么突然又可以了。
意图:就是消费端的代码应该输出:
用的github.com/streadway/amqp这个库。
相关代码
路由模式代码在https://my.oschina.net/bysu/blog/3092864中第四部分
可以绑定多个,只有消费的时候,如果想做一一绑定,可以一个key对应一个队列
同一个routingKey,当接收到消息时,只能一个队列接收消息其他将不再接收,除非不是同一个routingkey。如果两个队列同一个exchange不同的routingkey的话那么两个队列可同时接收到最新的消息。