私はrabbitmqとgolangを使用していますが、私はrabbitmqのようなcomsumer側で待機メッセージのスレッドを作っています。私はメインスレッドに信号を殺すのを待ち、rabbitmqスレッドにシグナルを送信したいが、メッセージがキューに入れられない場合、rabbitmqスレッドはシグナルメッセージを殺すのを永遠に待つ。 私はrabbitmqがcomsumerでタイムアウトしているのを発見しましたが、私はgolangではなくjavaでコードを見つけました。 私を助けることができますか?ありがとうございました。golang comsumer側のタイムアウトrabbitmq
0
A
答えて
0
私はあなたの質問を正しく理解していれば、キューからルーチン処理を終了することができますか?
タイムアウト設定はここでは機能しません。これはサーバー/クライアントのハートビートのためのもので、何時でもハートビートが受信されない場合にのみ実行されますが、キュー上のフレームを受信しなかった場合は何もしません。
私は何を示唆していることは、あなたのプログラムにkillシグナルを送信する場合さて、それは、それをキャッチストップチャネルを閉じ、キュー処理ゴルーチンが出て終了し、物事がシャットダウンするべきでしょう
import "sync"
import "os/signal"
var (
wg sync.WaitGroup
sigs = make(chan os.Signal, 1)
stop = make(chan bool)
)
func main() {
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM, syscall.SIGQUIT)
//your other setup stuff
wg.Add(2)
go myQueueProcessor()
go mySignalProcessor()
//Now your main will wait for your goroutines to finish here.
wg.Wait()
//your program cleanup stuff
}
func myQueueProcessor() {
defer wg.Done()
//keep running over the select indefinitely
for {
select {
case <-stop: //if the stop channel is closed exit out of go routine
return
case msg := <-sub.C: //Whatever queue processes you want
//do message stuff
}
}
}
func mySignalProcessor() {
defer wg.Done()
select {
case sig := <-sigs:
close(stop)
return
}
}
のようなものですきれいに。
関連する問題
- 1. RabbitMQのタイムアウト::エラー:IOタイムアウト7バイト
- 2. RabbitMQリクエスト、常にタイムアウト
- 3. RabbitMQ .NETクライアントと接続タイムアウト
- 4. 消費者とのRabbitMQキューのタイムアウト
- 5. 春RabbitMQの待機確認タイムアウト
- 6. Webサービス - 実装側のタイムアウト
- 7. rabbitMQ接続がタイムアウトしました
- 8. socket.error:タイムアウト(ドッカーコンテナで動作するCelery&RabbitMQ)
- 9. RabbitMQ(OSX):エラー:ホストのepmdエラーx1-6-20-0c-c8-19-6b-bd:タイムアウト(タイムアウト)
- 10. firebase接続タイムアウトのJavaサーバー側接続
- 11. PHP CurlタイムアウトがクラッシュするJavascriptクライアント側
- 12. rabbitmq消費者をタイムアウトする方法は?
- 13. Celeryはタイムアウト後にRabbitMQキューにタスクを戻さなかった
- 14. RabbitMQ DefaultConsumerにタイムアウトを設定するには?
- 15. golangでタイムアウトのあるPEファイルを開きます。
- 16. spring-amqp comsumerのパフォーマンスが非常に遅い
- 17. RabbitMQ - 出版社側で重複メッセージを避ける
- 18. golangは内側の文字列を印刷できません
- 19. データ上流側の依存関係のファクトリ待機タイムアウト
- 20. Googleアクションサーバー側のタイムアウトを増やしますか?
- 21. クライアント側の要求タイムアウトをJavaで処理する
- 22. golang - なぜnet.DialTimeoutは時間の半分をタイムアウトにするのですか?
- 23. RabbitMQのキューメッセージキュー]タブでのRabbitMQ Webインターフェイスで
- 24. RabbitMQ httpsドメインのrabbitMQへのコンシューマ接続
- 25. RabbitMQの
- 26. RabbitMQ
- 27. Golang exec.Command()エラー - golang
- 28. golangでgolang
- 29. Golang amqp reconnect
- 30. RabbitMQを使用してクライアント側からオブジェクトを取得する方法