eventBus的使用


事件总线类 OrderEventBus:



import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

import com.google.common.eventbus.AsyncEventBus;


public class OrderEventBus {
    private static final int invokerPoolSize = 50;
    private static final int load_factor = 10;
    private static BlockingQueue queue = new ArrayBlockingQueue(invokerPoolSize
        * load_factor);
    private static ThreadPoolExecutor executor = new ThreadPoolExecutor(
        invokerPoolSize,
        invokerPoolSize,
        60L,
        TimeUnit.SECONDS,
        queue,
        new ThreadPoolExecutor.CallerRunsPolicy());

    private static AsyncEventBus asyncEventBus   = new AsyncEventBus(executor);



    /**
     * 发布异步处理事件
     */
    public static void asyncPost(Object event) {
        asyncEventBus.post(event);
    }

    /**
     * 注册处理器
     *
     * @param handler
     */
    public static void register(Object handler) {
        asyncEventBus.register(handler);
    }

    /**
     * 注销处理器
     *
     * @param handler
     */
    public static void unregister(Object handler) {
        asyncEventBus.unregister(handler);
    }

}


保存订单事件 SaveOrderEvent:



public class SaveOrderEvent {
    private String       orderContext;
    private Long         customerId;
    private String       customerName;

    public String getOrderContext() {
        return orderContext;
    }

    public void setOrderContext(String orderContext) {
        this.orderContext = orderContext;
    }

    public Long getCustomerId() {
        return customerId;
    }

    public void setCustomerId(Long customerId) {
        this.customerId = customerId;
    }

    public String getCustomerName() {
        return customerName;
    }

    public void setCustomerName(String customerName) {
        this.customerName = customerName;
    }
}


订单保存事件处理器 OrderSaveHandler:

如果是使用spring,可以利用Java 的 @PostConstruct自动注册

package com.zhushuai.event;

import javax.annotation.PostConstruct;

import com.google.common.eventbus.Subscribe;

public class OrderSaveHandler {
@PostConstruct
    public void init() {
        OrderEventBus.register(this);
    }

    @Subscribe
    public void handle(SaveOrderEvent event) {
        System.out.println(
            "orderContext: " + event.getOrderContext() + "\n" + "customerId: " + event.getCustomerId() + "\n"
                + "customerName: " + event.getCustomerName());
    }
}


测试:

public class eventBusTest {
    public static void main(String[] args){
        OrderSaveHandler handler = new OrderSaveHandler();
        OrderEventBus.register(handler);
        SaveOrderEvent saveOrderEvent = new SaveOrderEvent();
        saveOrderEvent.setOrderContext("eventBus 测试,保存订单");
        saveOrderEvent.setCustomerId(250L);
        saveOrderEvent.setCustomerName("隔壁老王");

        OrderEventBus.asyncPost(saveOrderEvent);

    }
}


eventBus的使用_第1张图片

你可能感兴趣的:(java基础)