• EventBus 发布/订阅 机制的 java 实现


    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();
        
    }
    View Code

    创建一个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;
        }
    
    }
    View Code

    创建一个接口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);
            }
        }
    View Code

    完成上诉后,这套体系的订阅 消息体 发布 3个角色都已经完成了。最后编写个Demo 把服务类先注册到EventBus后,利用EventBus.post的方法发送任何实现MessageConfig这个消息接口的类的内容即可。

    可以尝试开发多个订阅者同时订阅,每一次的消息发布都会被注册到EventBus中的订阅者接收到,具体要用哪个订阅者处理业务就要靠代码去判断实现了。

  • 相关阅读:
    锚点
    autoLayout
    基础动画
    核心动画
    get和post的区别
    block的定义及使用
    传值-自定义构造函数传值
    字符串
    字典与可变字典
    RabbitMQ的可视化界面进行操作
  • 原文地址:https://www.cnblogs.com/culushitai/p/8474064.html
Copyright © 2020-2023  润新知