1
因此,我試圖實現一個簡單地偵聽Redis訂閱(我使用Go-Redis庫)的去例程,然後在它接收/處理後在通道上發送消息 redis消息。如何殺死阻止去例行程序
事情是這樣的:
func foo(redis *redis.Client, comm chan HandlerSignal) {
...
for {
msg, err := pubsub.ReceiveMessage()
sig := HandlerSignal{msg}
comm <- sig
}
}
但我想不出告訴去例程返回時被阻塞和等待Redis的消息的最佳方式。
有沒有人知道這種情況的常見做法,還是我對這一切都有錯?
是的,添加另一個退出/中止通道,然後在for循環中放入一個選擇,並在該通道返回時收聽,如果它發出信號。 – evanmcdonnal
使用[ReceiveTimeout](https://godoc.org/gopkg.in/redis.v3#PubSub.ReceiveTimeout) – tumdum
與其他Redis客戶端一樣,您可以通過從所有渠道取消訂閱客戶端來告訴訂閱者停止閱讀。這不受go-redis支持。另一種方法是在收到區分的哨兵消息時打破循環,並從應用程序發送該消息。 –