首页 > 其他分享 >guava中eventbus用法

guava中eventbus用法

时间:2024-02-21 18:02:12浏览次数:21  
标签:google 用法 public import eventbus guava Event2 event Event1

​ google的event 事件机制可以用于解耦,类似于spring的事件机制,可以同步也可以异步。

  1. 定时事件(类型随意,guava 调度的时候会根据对应的类型调对应的handler)
package google.event;

import lombok.AllArgsConstructor;
import lombok.Data;

@Data
@AllArgsConstructor
public class Event1 {

    private String name;

    private String tag;
}


----
package google.event;

import lombok.AllArgsConstructor;
import lombok.Data;

@Data
@AllArgsConstructor
public class Event2 {

    private String name;

    private String tag;
}
  
  1. 定义事件处理器

处理器1:

package google.event;

import com.google.common.eventbus.Subscribe;
import org.example.PrintUtils;

public class Event1Handler {

    @Subscribe
    public void handleEvent(Event1 event) {
        PrintUtils.printWithTime("Event1Handler ~~~~");
        PrintUtils.printWithTime(event.toString());
    }
}

处理器2:

package google.event;

import com.google.common.eventbus.Subscribe;
import org.example.PrintUtils;

public class Event2Handler {

    @Subscribe
    public void handleEvent(Event2 event) {
        PrintUtils.printWithTime("Event2Handler ~~~~");
        PrintUtils.printWithTime(event.toString());
    }
}
  1. 测试类:

异步测试,同步消息总线发消息和接收消息都是main 线程

package google.event;

import com.google.common.eventbus.AsyncEventBus;
import com.google.common.eventbus.EventBus;

import java.util.concurrent.Executors;

public class Client {

    public static void main(String[] args) {
        // 同步
//        EventBus eventBus = new EventBus();
        // 异步,需要传入自己的线程池
        EventBus eventBus = new AsyncEventBus(Executors.newFixedThreadPool(1));

        Event1Handler event1Handler = new Event1Handler();
        Event2Handler event2Handler = new Event2Handler();
        eventBus.register(event1Handler);
        eventBus.register(event2Handler);

        eventBus.post(new Event1("Event1", "Event1"));
        eventBus.post(new Event2("Event2", "Event2"));
    }
}

结果:

pool-1-thread-1	16:30:01	Event1Handler ~~~~
pool-1-thread-1	16:30:02	Event1(name=Event1, tag=Event1)
pool-1-thread-1	16:30:02	Event2Handler ~~~~
pool-1-thread-1	16:30:02	Event2(name=Event2, tag=Event2)

标签:google,用法,public,import,eventbus,guava,Event2,event,Event1
From: https://www.cnblogs.com/qlqwjy/p/18025883

相关文章

  • 英语形容词后置用法
    问题来源:TheEconomist:  'Ever-strongercopyrightprotectionhaswithheldincalculableamountsofculturefromthepublicdomain,'arguesBenSobelinaguestessay.'Butwewon’trepairthatdamagewithexceptionstailor-madetobenefitthe......
  • thread_local的一些用法
    thread_local变量thread_local变量是C++11新引入的一种存储类型。它会影响变量的存储周期(Storageduration),C++中有4种存储周期:automaticstaticdynamicthread有且只有thread_local关键字修饰的变量具有线程周期(threadduration),这些变量(或者说对象)在线程开始的时候......
  • C++函数用法
    1.getline函数的用法函数声明boolgetline(istream&in,string&s)功能说明从输入流读入一行到变量strings,即使是空格也可以读入。直到出现以下情况为止:读入了文件结束标志读到一个新行(有重载函数可以指定行分隔符,默认是"\n".)达到字符串的最大长度如果getline没有读......
  • glom用法
    Sparkglom功能:该函数将RDD中每一个分区变成一个数组,并放置在新的RDD中,数组中元素的类型与原分区中元素类型一致valconf:SparkConf=newSparkConf().setMaster("local[*]").setAppName("mapPartitionsWithIndex1")valsc=newSparkContext(conf)valdataRD......
  • vue 监听器watch用法
    <template> <div>  <h1>{{message}}</h1>  <button@click="btnclick">点击</button> </div></template><script> exportdefault{  data(){   return{    message:'hello&......
  • vue 具名插槽slot 用法
    vue具名插槽slot为插槽取名字app.vue<template> <h1>插槽知识</h1> <SmallSlot> <template#header>  <div>  <ul>   <li>1</li>   <li>2</li>   <li>3</li>  </ul> ......
  • vue 插槽slot 用法
    vue插槽slot父组件为子组件传递html结构app.vue<template> <h1>插槽知识</h1> <SmallSlot> <div>  <ul>   <li>1</li>   <li>2</li>   <li>3</li>  </ul> </div> </Sma......
  • vue $emit事件用法
    App.vue<template> <ConpentA @paEvent="clickData"/> {{mes}}</template><script>importConpentAfrom'./components/ConpentA.vue';exportdefault{ data(){  return{   mes:''  } },......
  • Python 中 print 函数的用法
    在Python中,可以使用print函数来打印一个变量或者一个字符串:print("MynameisAlice")print(i)如果需要字符串格式化来打印一句话中包含变量的内容,有几种常用的方法:使用格式化字符串(f-string):在字符串前面加上字母"f",然后在字符串中使用大括号{}包裹变量名。示例代码如下:......
  • rand()函数用法、生成的范围
    1.rand()函数用法语法:#include<stdlib.h>intrand(void);功能:函数返回一个在零到RAND_MAX之间的伪随机整数。C++中引用头文件#include<cstdlib>2.rand()生成的范围1、rand()%100//返回0-99区间内一个随机数2、10+rand()%90//得到[10,99]区间内的一个随机数3、a......