maven导入依赖:
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>19.0</version>
</dependency>
应用场景: 一个消息的发布 可以有根据消息内容选择不同的处理机制。
register(); 将服务注册到EventBus中
post();讲消息发送到EventBus中
unregister();移除注册的服务
一个消息的发布,会被EventBus注册过的服务同时订阅,通过消息的判断可以断定该消息由哪个或哪几个服务去处理。
实现:
定义一个监听的内容接口为MessageConfig。

public interface MessageConfig { String getCode(); String getTradeCode(); JmsMsgVO getJmsMsg(); }
创建一个BaseMessage监听的参数类 去实现MessageConfig接口。

public class BaseMessage implements MessageConfig{ private String code; private String tradeCode; private JmsMsgVO jmsMsg; public BaseMessage (String code, JmsMsgVO jmsMsg, String tradeCode) { this.code = code; this.jmsMsg = jmsMsg; this.tradeCode = tradeCode; } @Override public String getTradeCode() { return tradeCode; } public void setTradeCode(String tradeCode) { this.tradeCode = tradeCode; } public void setCode(String code) { this.code = code; } public void setJmsMsg(JmsMsgVO jmsMsg) { this.jmsMsg = jmsMsg; } @Override public String getCode() { return code; } @Override public JmsMsgVO getJmsMsg() { return jmsMsg; } }
创建一个接口Listerner 并编辑一个抽象方法,监听MessageConfig(变相的监听所有实现MessageConfig接口的消息类)
public interface Listerner { void listen(MessageConfig messageCode); }
最后实现一个订阅服务,用以接收消息后的处理业务。该类必须由ioc容器管理(必须加上注解@Component),且重写接口Listerner的方法并用注解@Subscribe(该注解表示订阅后具体是哪个方法来处理业务的)

@Component public class JdEvent implements Listerner{ @Subscribe @Transactional(rollbackFor=Exception.class) public void listen(MessageConfig messageCode) { System.out.println(messageCode); } }
完成上诉后,这套体系的订阅 消息体 发布 3个角色都已经完成了。最后编写个Demo 把服务类先注册到EventBus后,利用EventBus.post的方法发送任何实现MessageConfig这个消息接口的类的内容即可。
可以尝试开发多个订阅者同时订阅,每一次的消息发布都会被注册到EventBus中的订阅者接收到,具体要用哪个订阅者处理业务就要靠代码去判断实现了。