spring reactor 事件异步驱动. 使用了spring的mvc 使用了spring的 @Configuration annotation配置没有写xml文件.
步骤
1:声明 Reactor bean
@Bean(name="reactor")
public Reactor getReactor(){
return new Reactor();
}
2:Controller
@Controller
public class HomeController {
@Autowired
Reactor reactor;
@RequestMapping(value = "/")
public ModelAndView test(HttpServletResponse response) throws IOException {
// lets send some stuff
LogEvent logEvent = new LogEvent();
logEvent.setMessage("hello world");
logEvent.setTimestamp(new Date());
logEvent.setSource("test");
logEvent.setO(reactor);
// send
reactor.notify("log.event", Fn.event(logEvent));
System.out.println("after notified");
Map model=new HashMap();
model.put("result", "您的事件已受理.稍后将会通知你.");
model.put("success", true);
return new ModelAndView("home",model);
}
}
第三步 :Consumer 这里Consumer 可以是任意类型
package springarach.archtype.consumer;
import reactor.fn.Event;
import reactor.spring.context.annotation.On;
import springarach.archtype.event.LogEvent;
import com.alibaba.fastjson.JSON;
public class SimpleConsumer { //implements Consumer>
/*
* log 事件异步处理者.
*/
@On(reactor = "@reactor", selector = "log.event")
public void accept(Event event){
System.out.println(Thread.currentThread().getId() + " " + event.getData());
System.out.println(JSON.toJSONString(event.getData().getO()));
}
@On(reactor = "@reactor", selector = "log.event")
public String other(Event event){
try {
Thread.sleep(2000);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("延迟2秒处理.");
System.out.println(JSON.toJSONString(event.getData().getO()));
return "fdsfd";
}
}
其中logEvent 是
package springarach.archtype.event;
import java.io.Serializable;
import java.util.Date;
public class LogEvent implements Serializable {
private static final long serialVersionUID = 1L;
private String source;
private Date timestamp;
private String message;
Object o;
public Object getO() {
return o;
}
public void setO(Object o) {
this.o = o;
}
public String getSource() {
return source;
}
public void setSource(String source) {
this.source = source;
}
public Date getTimestamp() {
return timestamp;
}
public void setTimestamp(Date timestamp) {
this.timestamp = timestamp;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
@Override
public String toString() {
return "LogEvent [source=" + source + ", timestamp=" + timestamp
+ ", message=" + message + "]";
}
}