【发布时间】:2017-05-17 21:55:49
【问题描述】:
我有 2 个缓冲通道服务入站请求:
rabbitQ = make(chan map[string]interface{}, 1000)
sqsQ = make (chan map[string]interface{}, 1000)
我的调度程序函数如下所示:
func dispatchMessage(params map[string]interface{}) {
if !shouldFailoverToSQS {
select {
case rabbitQ <- params:
sentToRabbitMQ++
case sqsQ <- params:
sentToSQS++
default:
log.Error("Failed to dispatch mesaage to either RabbitMQ or SQS")
}
} else {
sqsQ <- params
}
}
我希望消息总是被发送到rabbitQ,除非缓冲区已满,但我发现调用失败并且大约有一半时间将消息发送到sqsQ。这不是我想要的 - 如果 rabbitQ 已满,我只想发送到 sqsQ。
我该如何执行?
【问题讨论】:
-
Select 随机选择一个可运行的案例。如果你不想要这个随机选择,你不能有两个案例,而只有一个发送给 rabbitQ。如果这种情况无法运行,您点击默认情况并发送到 sqs(可能在嵌套选择中以允许失败日志记录)。