github.com/wfusion/gofusion@v1.1.14/common/infra/watermill/message/router/plugin/signals.go (about)

     1  package plugin
     2  
     3  import (
     4  	"fmt"
     5  	"os"
     6  	"os/signal"
     7  	"syscall"
     8  
     9  	"github.com/wfusion/gofusion/common/infra/watermill/message"
    10  )
    11  
    12  // SignalsHandler is a plugin that kills the router after SIGINT or SIGTERM is sent to the process.
    13  func SignalsHandler(r *message.Router) error {
    14  	sigs := make(chan os.Signal, 1)
    15  	signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
    16  
    17  	go func() {
    18  		sig := <-sigs
    19  		r.Logger().Info(fmt.Sprintf("[Common] watermill received %s signal, closing\n", sig), nil)
    20  
    21  		err := r.Close()
    22  		if err != nil {
    23  			r.Logger().Error("[Common] watermill router close failed", err, nil)
    24  		}
    25  	}()
    26  	return nil
    27  }