NIUCLOUD是一款SaaS管理后台框架多应用插件+云编译。上千名开发者、服务商正在积极拥抱开发者生态。欢迎开发者们免费入驻。一起助力发展! 广告
### 简单模式 一个生产者,一个消费者. ![](https://img.kancloud.cn/71/db/71db67e60d0605b11f14bfd71d322f64_920x243.png) ### 特点 1. 不需要声明交换机(使用AMQP default). 2. 不需要绑定队列. 3. 不需要routingKey和bindingKey. 4. 需要声明队列. ### 封装simple模式 ~~~ package rabbitmq import ( "fmt" "github.com/streadway/amqp" ) const MQURL = "amqp://guest:guest@localhost:5672" type RabbitMQ struct { conn *amqp.Connection channel *amqp.Channel Exchange string //交换机名 Queue string //队列名 Key string //路由名 AMQPUrl string //连接URL } //创建rabbit实例 func New(exchange, queue, key string) *RabbitMQ { r := &RabbitMQ{ Exchange: exchange, Queue: queue, Key: key, AMQPUrl: MQURL, } var err error r.conn, err = amqp.Dial(r.AMQPUrl) // :=不能用于结构体赋值 r.FailOnErr(err, "创建Connection失败") r.channel, err = r.conn.Channel() r.FailOnErr(err, "创建channel失败") return r } //处理错误 func (r *RabbitMQ) FailOnErr(err error, msg string) { if err != nil { fmt.Printf("%s : %s\n", err, msg) return } } func NewSimpleRabbitMQ(queue string) *RabbitMQ { return New("", queue, "") } //发送消息 func (r *RabbitMQ) PublishSimple(message string) { _, err := r.channel.QueueDeclare(r.Queue, true, false, false, false, nil) if err != nil { fmt.Println(err) return } r.channel.Publish(r.Exchange, r.Queue, false, false, amqp.Publishing{ ContentType: "text/plain", Body: []byte(message), }) } //消费消息 func (r *RabbitMQ) ConsumeSimple() { _, err := r.channel.QueueDeclare(r.Queue, true, false, false, false, nil) if err != nil { fmt.Println(err) return } msg, err := r.channel.Consume(r.Queue, "", true, false, false, false, nil) forever := make(chan struct{}) go func() { for v := range msg { fmt.Println(string(v.Body)) } }() fmt.Println("等待接受消息...") <-forever } ~~~