Spring 事件发布

在IOT平台的开发过程中,有些业务线需要实时获取设备的在线和离线状态。这时我们需要发布设备的上线和离线消息。为了达到结偶的目的,一个类只做一件事,我们在项目中使用了Spring的事件机制。
-定义事件类
-获取Spring事件发布器(并在设备上线和离线时,发布事件)
-监听事件

定义上线离线事件

**
 * 设备上线事件
 * @author songkaiang
 */
public class DeviceOnlineEvent extends ApplicationEvent {

    private String machineNo;

    private Date eventTime;

    public String getMachineNo() {
        return machineNo;
    }

    public void setMachineNo(String machineNo) {
        this.machineNo = machineNo;
    }

    public Date getEventTime() {
        return eventTime;
    }

    public void setEventTime(Date eventTime) {
        this.eventTime = eventTime;
    }

    /**
     * Create a new ApplicationEvent.
     *
     * @param source the object on which the event initially occurred (never {@code null})
     */
    public DeviceOnlineEvent(Object source, String machineNo, Date eventTime) {
        super(source);
        this.machineNo = machineNo;
        this.eventTime = eventTime;
    }

    @Override
    public String toString() {
        return "DeviceOnlineEvent{" +
                "machineNo='" + machineNo + '\'' +
                ", eventTime=" + eventTime +
                '}';
    }
}

发布事件

发布事件时,需要获取Spring中的事件发送服务,此时只需要实现ApplicationEventPublisherAware接口即可

@Component
public class DeviceEventPublisher implements ApplicationEventPublisherAware {

    private ApplicationEventPublisher applicationEventPublisher;

    @Override
    public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) {
        this.applicationEventPublisher = applicationEventPublisher;
    }

    /**
     * 发布设备上线事件
     * @param deviceOnlineEvent
     */
    public void publisherDeviceOnlineEvent(DeviceOnlineEvent deviceOnlineEvent){
        applicationEventPublisher.publishEvent(deviceOnlineEvent);
    }

    /**
     * 发布设备离线事件
     * @param deviceOfflineEvent
     */
    public void publisherDeviceOfflineEvent(DeviceOfflineEvent deviceOfflineEvent){
        applicationEventPublisher.publishEvent(deviceOfflineEvent);
    }
}

监听上线事件

监听事件只需要实现ApplicationListener接口类,并实现对应的接口方法。代码如下

@Component
public class DeviceOnlineEventListener implements ApplicationListener<DeviceOnlineEvent> {

    @Override
    public void onApplicationEvent(DeviceOnlineEvent event) {
        System.err.println("设备上线监听:"+event.toString());
        System.err.println("发送上线消息成功:"+ event.toString());
    }

}

事件发布测试代码

public class Main {

    public static void main(String[] args) {
        ApplicationContext beans=new ClassPathXmlApplicationContext("classpath:applicationContent-event.xml");

        DeviceEventPublisher deviceEventPublisher = beans.getBean(DeviceEventPublisher.class);
        DeviceOnlineEvent deviceOnlineEvent = new DeviceOnlineEvent("onineEvent","ska", new Date());
        System.err.println("设备上线事件发布成功");
        deviceEventPublisher.publisherDeviceOnlineEvent(deviceOnlineEvent);
    }

}

测试结果:

设备上线事件发布成功
设备上线监听:DeviceOnlineEvent{machineNo='ska', eventTime=Wed Mar 10 17:43:46 CST 2021}
发送上线消息成功:DeviceOnlineEvent{machineNo='ska', eventTime=Wed Mar 10 17:43:46 CST 2021}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值