// RAINBOND, Application Management Platform // Copyright (C) 2014-2017 Goodrain Co., Ltd. // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. For any non-GPL usage of Rainbond, // one or multiple Commercial Licenses authorized by Goodrain Co., Ltd. // must be obtained first. // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // You should have received a copy of the GNU General Public License // along with this program. If not, see . package server import ( "os" "os/signal" "syscall" "github.com/goodrain/rainbond/cmd/mq/option" "github.com/goodrain/rainbond/pkg/mq/api" "github.com/Sirupsen/logrus" ) //Run start run func Run(s *option.MQServer) error { errChan := make(chan error) //step 1:start mq api manager apiManager, err := api.NewManager(s.Config) if err != nil { return err } apiManager.Start(errChan) defer apiManager.Stop() //step finally: listen Signal term := make(chan os.Signal) signal.Notify(term, os.Interrupt, syscall.SIGTERM) select { case <-term: logrus.Warn("Received SIGTERM, exiting gracefully...") case err := <-errChan: logrus.Errorf("Received a error %s, exiting gracefully...", err.Error()) } logrus.Info("See you next time!") return nil }