Guava异步框架Event-bus在spring中的使用总结

47 篇文章 1 订阅
7 篇文章 0 订阅

Event-bus使用总结

1. 概述

guava中EventBus是一个消息处理总线,基于观察者模式设计和实现。主要介绍下在spring框架中如何使用和配置EventBus。

EventBus主要分为两种,一种是同步消息总线(EventBus);另一种是异步消息总线(AsyncEventBus)。

     下面主要以同步消息总线为例来介绍下EventBusSpring的结合使用。一个消息总线可以支持多种消息的订阅和发送,不同的消息通过类名来区分。消息体使用一个简单的Java DO,本身不需要继承或实现EventBus的接口。例如如下文定义的MessageEvent对象:

先引入pom

<dependency>

            <groupId>org.greenrobot</groupId>

            <artifactId>eventbus</artifactId>

            <version>3.1.1</version>

        </dependency>

先定义一个config配置Event负责创建event对象

@Configuration

public class EventConfig {

    private EventBus eventBus;

    @Bean(name = "eventBus")

    public synchronized EventBus eventBus() {

        if (null == eventBus) {

            eventBus = new AsyncEventBus("testventBus", Executors.newFixedThreadPool(30));

        }

        return eventBus;

    }

再创建一个event监听负责注册event接口,下面的Test1ServiceImpl  方法中有@Subscribe,负责处理对应对象参数的方法。

@Component

@Slf4j

public class EventListener {

    @Autowired

    private EventBus eventBus;

    @Autowired

    private Test1ServiceImpl  test1Service;

    @Autowired

     private Test2ServiceImpl  test2Service;

    @PostConstruct

    public void init() {

        eventBus.register(test1Service);

        eventBus.register(test1=2Service);

    }

    @PreDestroy

    public void destroy() {

        eventBus.unregister(activityService);

        eventBus.unregister(activityMetaService);

        eventBus.unregister(customerMiscService);

        eventBus.unregister(messageService);

        eventBus.unregister(topicService);

    }

}

如下是消息处理了类,是按照@Subscribe中方法的参数类型进行处理的,下面例子处理所有消息体是MessageEvent对象的消息。

@Slf4j

@Service

public class Test1ServiceImpl implements Test1Service {

    @Autowired

    private MessageStoreBuilder messageStoreBuilder;

    @Subscribe

    public void testMessages(MessageEvent event) {

       System.out.println(enent.id);

    }

}

定义的event不需要继承任何对象接口,只是为了对消息进行区分,发送的和接受的是同一个对象就可以处理。

@Data

@Builder

public class MessageEvent {

    private String id;

    private String fromViewId;

    private boolean delete = false;

}

使用时按照如下方法,在service中注入eventBus对象,然后在需要发送消息的地方利用如下方法发送即可。

eventBus.post(MessageEvent.builder().myActivityViewId(targetViewId).fromViewId(reactionEntry.getViewId()).build());

如下好文写的较好可进行参考:

https://www.cnblogs.com/shamo89/p/11774293.html

   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值