老师,我在这章测试代码,消费者启动成功,rabbitmq后台也看得到消费者,在网站后台发送消息,消费者也能打印出来,但是启动生产者,只打印出发送成功,消费者怎么都却接收不到生产者发送的Hello imooc!请问一下是什么原因呢?
//简单模式step:2.简单模式下生产代码
func (r *RabbitMQ) PublishSimple(message string) {
//1.申请队列,如果队列不存在会自动创建,如果存在则跳过创建
//保证队列存在,消息能发送到队列中
_,err := r.channel.QueueDeclare(
r.QueueName,
//是否持久化
false,
//是否自动删除
false,
//是否具有排他性
false,
//是否阻塞
false,
//额外属性
nil,
)
if err != nil{
fmt.Println(err)
}
//2.发送消息到队列中
r.channel.Publish(
r.Exchange,
r.QueueName,
//如果为true,根据exchange类型和routkey规则,如果
// 无法找到符合条件的队列那么会把发送的消息返回给发送者
false,
//如果为true,当exchange发送消息到队列后发现队列上没有绑定消费者,
//则会把消息发还给发送者
false,
amqp.Publishing{
ContentType: "text/plain",
Body:[]byte(message),
})
}
func (r *RabbitMQ) ConsumeSimple() {
//1.申请队列,如果队列不存在会自动创建,如果存在则跳过创建
//保证队列存在,消息能发送到队列中
_,err := r.channel.QueueDeclare(
r.QueueName,
//是否持久化
false,
//是否自动删除
false,
//是否具有排他性
false,
//是否阻塞
false,
//额外属性
nil,
)
if err != nil{
fmt.Println(err)
}
//接受消息
msgs,err := r.channel.Consume(
r.QueueName,
//用来区分多个消费者
"",
//是否自动应答
true,
//是否具有排他性
false,
//如果设置为true,表示不能将同一个connection中发送的消息传递给这个
//connection中的消费者
false,
//队列消息是否阻塞
false,
nil,
)
if err != nil{
fmt.Println(err)
}
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 (
"fmt"
"imooc-rabbitmq/RabbitMQ"
)
func main() {
rabbitmq := RabbitMQ.NewRabbitMQSimple("imoocSimple")
rabbitmq.PublishSimple("Hello imooc!")
fmt.Println("发送成功!")
}
package main
import "imooc-rabbitmq/RabbitMQ"
func main() {
rabbitmq := RabbitMQ.NewRabbitMQSimple("imoocSimple")
rabbitmq.ConsumeSimple()
}