Spring applicationPublish 本地化发布订阅机制

目录

一、事件

二、发布者

三、订阅者

四、异步


发布订阅机制三要素:事件、发布者、订阅者

一、事件

public class UserRegisterEvent extends ApplicationEvent {

    public UserRegisterEvent(String name) {
        super(name);
    }

}

二、发布者

@Service
public class UserService implements ApplicationEventPublisherAware {

    public void register(String name) {
        System.out.println("用户:" + name + " 已注册!"+Thread.currentThread().toString());
        applicationEventPublisher.publishEvent(new UserRegisterEvent(name));
        System.out.println("用户:" + name + " 已注册! finish "+Thread.currentThread().toString());
    }

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

三、订阅者

@Service
public class EmailService implements ApplicationListener<UserRegisterEvent> {

    @Override
    public void onApplicationEvent(UserRegisterEvent userRegisterEvent) {
        System.out.println("邮件服务接到通知,给 " + userRegisterEvent.getSource() + " 发送邮件..."+Thread.currentThread().toString());
    }
}

加入接口事件

	@Autowired
	private UserService userService;
	@RequestMapping("/register")
	public String register(){
		userService.register("xttblog.com");
		return "success";
	}

启动服务

访问http://localhost:8080/register,可看到log,发布和事件接收。

四、异步

异步订阅者

@Component
public class MyEventListener {


    @EventListener
    @Async
    public void listenerEvent(UserRegisterEvent event) {
        System.out.println("listener 邮件服务接到通知,给 " + event.getSource() + " 发送邮件..."+Thread.currentThread().toString());
    }

}

加入开启异步任务

@EnableAsync

事件上@Async

 启动服务,可看到log,发布和事件接收为异步。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值