golang rabbitmq 消费者
时间: 2023-10-07 19:08:15 浏览: 231
在 Golang 中使用 RabbitMQ 消费者,你需要使用 RabbitMQ 的 Go 客户端库 `github.com/streadway/amqp`。下面是一个简单的例子:
首先,你需要导入 RabbitMQ 的 Go 客户端库:
```go
import "github.com/streadway/amqp"
```
然后,你需要建立与 RabbitMQ 服务器的连接和通道:
```go
conn, err := amqp.Dial("amqp://guest:guest@localhost:5672/")
if err != nil {
panic(err)
}
defer conn.Close()
ch, err := conn.Channel()
if err != nil {
panic(err)
}
defer ch.Close()
```
在通道上声明队列和绑定:
```go
q, err := ch.QueueDeclare(
"hello", // 队列名称
false, // 是否持久化
false, // 是否自动删除
false, // 是否独占
false, // 是否等待服务器响应
nil, // 队列的参数
)
if err != nil {
panic(err)
}
err = ch.QueueBind(
q.Name, // 队列名称
"", // routing key
"amq.direct", // exchange
false,
nil,
)
if err != nil {
panic(err)
}
```
使用 `ch.Consume()` 方法消费消息:
```go
msgs, err := ch.Consume(
q.Name, // 队列名称
"", // 消费者名称
true, // 是否自动应答
false, // 是否独占
false, // 是否不等待服务器响应
false, // 消费者参数
)
if err != nil {
panic(err)
}
for msg := range msgs {
fmt.Println(string(msg.Body))
}
```
在这个例子中,我们使用 `ch.Consume()` 方法从队列中消费消息。当有新的消息到达时,它会被放入 `msgs` 通道中。
注意,这个例子中的消费者是自动应答的(即 `autoAck` 参数设置为 `true`)。这意味着当消费者成功接收到消息时,它会自动将消息标记为已处理。如果你需要手动确认消息,请将 `autoAck` 参数设置为 `false`,并在处理完消息后调用 `msg.Ack(false)` 方法来确认消息。
完整代码示例:https://github.com/streadway/amqp/blob/master/_examples/simple-consumer/consumer.go
阅读全文