spring事件的订阅发布,适用业务解耦合
使用场景:新用户注册之后,需要发放优惠券;一个订单服务在接收到新订单时发布一个“订单已创建”事件,库存服务和通知服务分别订阅该事件;日志和监控;实时通知系统;异步数据处理;微服务通信;
创建事件:根据具体业务创建需要的实体
/*** 创建事件*/
public class CleaningBoxEvent {private String message;public CleaningBoxEvent(String message) {this.message = message;}public String getMessage() {return message;}
}
创建观察者 :执行具体业务的业务逻辑
@Component
public class CleaningBoxEventListener {@EventListenerpublic void handleCustomEvent(CleaningBoxEvent event) {System.out.println("Received custom event: " + event.getMessage());// 在这里执行观察者的业务逻辑}
}
发布事件 :注入bean
/*** 发布事件*/
@Component
public class EventPublisherService {@Autowiredprivate ApplicationEventPublisher applicationEventPublisher;public void publishCustomEvent(String message) {CleaningBoxEvent customEvent = new CleaningBoxEvent(message);applicationEventPublisher.publishEvent(customEvent);}
}
执行订阅发布:引用事件的方法
/***执行订阅发布*/public void doSomethingAndPublishEvent() {// 发布事件 //returnByList.size()eventPublisherService.publishCustomEvent("自动清箱完成数量:");}
执行:doSomethingAndPublishEvent();