RabbitMQ SDK中匿名函数
package rabbitmq
// consumer name随机, 指定autoAck
delivery, err := ch.Consume(name, uuid.New().String(), true, false, false, false, nil)
if err != nil {
return err
}
// 监听消息, 遍历channel, channel关闭后协程也会结束
go func() {
for d := range delivery {
// 消息处理
err := consumeFunc(name, d.MessageId, d.Body)
if err != nil {
fmt.Println("error")
}
}
}()
package common
type ConsumeFunc func(topic, messageID string, body []byte) // messageID可以用于检查消息幂等性
备注:在数学和计算机科学中,幂等操作的特点是任意多次执行所产生的影响和一次执行的影响相同。如果在消息的重复消费会影响业务,必须要对消息做幂等处理。消息重复的可能原因如下:
- 发送时候消息重复
- 投递时消息重复
- 负载均衡时消息重复
参考:
消息幂等