将signal功能拆解出来独立为middleware