package com.scio.hanlin.crm;
import java.util.UUID;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.LinkedBlockingDeque;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import org.springframework.transaction.support.TransactionSynchronization;
import org.springframework.transaction.support.TransactionSynchronizationManager;
import com.google.common.eventbus.AsyncEventBus;
import com.google.common.eventbus.EventBus;
import com.google.common.eventbus.Subscribe;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class EventBusDemo {
static ExecutorService executor =
new ThreadPoolExecutor(2, 4, 60L, TimeUnit.SECONDS, new LinkedBlockingDeque<Runnable>(30));
static EventBus bus = new AsyncEventBus(executor);
public static void main(String[] args) throws InterruptedException {
bus.register(new MyEventLisenter());
// bus.register(new MyEventLisenter());
log.info("post start");
bus.post(new MyEvent(UUID.randomUUID().toString()));
bus.post(new MyEvent(UUID.randomUUID().toString()));
TimeUnit.SECONDS.sleep(2);
log.info("post end");
executor.shutdown();
final int status = TransactionSynchronization.STATUS_COMMITTED;
}
public void publishAfterCommit(MyEvent event) {
TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() {
@Override
public void afterCommit() {
bus.post(new MyEvent(UUID.randomUUID().toString()));
};
});
}
@Data
@AllArgsConstructor
public static class MyEvent {
String id;
}
@Slf4j
public static class MyEventLisenter {
@Subscribe
public void onEvent(MyEvent event) {
log.info("onEvent : {}", event.getId());
}
}
}
EventBusDemo
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...