ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
RabbitMQ是一个消息代理:它接受消息并转发。 * **生产者**:发送消息 * **队列**:消息存储在队列中。队列只受主机内存和磁盘限制,实际上是一个大的消息缓冲区。许多生产者可以向一个队列发送消息,而许多消费者尝试从一个队列接收消息。 * **消费者**:等待接收消息。 **生产者示例代码:** ~~~go // 1.建议RabbitMQ连接 conn, err := amqp.Dial("amqp://guest:guest@localhost:5672/") // ....err处理 defer conn.Close() // 2.创建channel ch, err := conn.Channel() // ....err处理 defer ch.Close() // 3.声明消息要发送到的队列,name为队列名 q, err := ch.QueueDeclare( "hello", // name false, // durable false, // delete when unused false, // exclusive false, // no-wait nil, // arguments ) // 4.将消息发布到声明的队列 body := "Hello World!" err = ch.Publish( "", // exchange q.Name, // routing key false, // mandatory false, // immediate amqp.Publishing { ContentType: "text/plain", Body: []byte(body), }) ~~~ **消费者代码示例:** ``` // 1.建议RabbitMQ连接 conn, err := amqp.Dial("amqp://guest:guest@localhost:5672/") // ....err处理 defer conn.Close() // 2.获取channel ch, err := conn.Channel() // ....err处理 defer ch.Close() // 3.声明消息要发送到的队列,name为队列名 q, err := ch.QueueDeclare( "hello", // name false, // durable false, // delete when unused false, // exclusive false, // no-wait nil, // arguments ) // 获取接收消息的Delivery通道 msgs, err := ch.Consume( q.Name, // queue "", // consumer true, // auto-ack false, // exclusive false, // no-local false, // no-wait nil, // args ) // ....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 ```