使用 spring reactor 非同步事件驅動
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<Event<LogEvent>>
/*
* log 事件非同步處理者.
*/
@On(reactor = "@reactor", selector = "log.event")
public void accept(Event<LogEvent> 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<LogEvent> 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 + "]";
}
}
步驟
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<Event<LogEvent>>
/*
* log 事件非同步處理者.
*/
@On(reactor = "@reactor", selector = "log.event")
public void accept(Event<LogEvent> 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<LogEvent> 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 + "]";
}
}
相關文章
- Reactor: Spring釋出基於JVM的非同步事件驅動框架ReactSpringJVM非同步事件框架
- Spring:事件驅動Spring事件
- 徹底搞懂徹底搞懂事件驅動模型 - Reactor事件模型React
- 小馬哥Spring事件驅動模型Spring事件模型
- 基於spring實現事件驅動Spring事件
- Spring中的事件驅動模型(一)Spring事件模型
- spring — Spring中的事件驅動機制解析Spring事件
- 使用Spring Cloud Stream和Spring State Machine建立事件驅動的微服務案例SpringCloudMac事件微服務
- 使用Spring Cloud Stream和RabbitMQ實現事件驅動的微服務SpringCloudMQ事件微服務
- 事件驅動的微服務-事件驅動設計事件微服務
- 帶你自定義實現Spring事件驅動模型Spring事件模型
- 事件消費者之 Reactor - 事件溯源事件React
- springCloud學習5(Spring-Cloud-Stream事件驅動)SpringGCCloud事件
- 180609-Spring之事件驅動機制的簡單使用Spring事件
- 使用事件驅動代替定時任務事件
- 基於 mysql 非同步驅動的非阻塞 Mybatis 瞭解一下MySql非同步MyBatis
- 驅動Driver-阻塞&非阻塞
- node.js的非同步I/O、事件驅動、單執行緒Node.js非同步事件執行緒
- 使用Spring Reactor最佳化推薦流程SpringReact
- Reactor事件驅動的兩種設計實現:物件導向 VS 函數語言程式設計React事件物件函數程式設計
- Repository的事件驅動事件
- 事件驅動程式設計事件程式設計
- “訊息驅動、事件驅動、流 ”基礎概念解析事件
- 驅動Driver-非同步通知非同步
- 使用Spring Boot的消費者驅動合同Spring Boot
- 事件驅動及其設計模式事件設計模式
- 事件驅動架構設計事件架構
- 事件驅動,Do you know?事件
- Redis 中的事件驅動模型Redis事件模型
- 我對事件驅動的理解事件
- Spring Boot 實現非同步事件EventSpring Boot非同步事件
- 【譯】理解Node事件驅動架構事件架構
- 網頁主動探測工具-使用Reactor模式網頁React模式
- 事件驅動系統中不同型別的事件 - frankdejonge事件型別
- Spring5原始碼解析-Spring中的非同步事件Spring原始碼非同步事件
- 【linux】驅動-13-阻塞與非阻塞Linux
- Spring Boot Reactor Netty配置 | BaeldungSpring BootReactNetty
- 同步非同步,阻塞非阻塞非同步