首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

事务/提交后的guava eventbus post

基础概念

Guava EventBus 是 Google Guava 库中的一个事件总线机制,用于解耦事件的发布者和订阅者。它允许组件通过发布事件来通知其他组件,而不需要显式地调用这些组件的方法。这种机制有助于实现松耦合的系统设计。

事务 是数据库操作的一种机制,用于确保一组数据库操作要么全部成功,要么全部失败,从而保证数据的一致性和完整性。

相关优势

  1. 解耦:EventBus 通过事件发布和订阅机制,使得系统组件之间的耦合度降低,便于系统的扩展和维护。
  2. 异步处理:EventBus 支持异步事件处理,可以提高系统的响应速度和吞吐量。
  3. 事务一致性:结合事务机制,可以确保事件发布和处理过程中的数据一致性。

类型

Guava EventBus 主要有以下几种类型:

  1. 同步事件:事件发布后立即被处理。
  2. 异步事件:事件发布后被放入队列,由后台线程异步处理。

应用场景

  1. 系统解耦:适用于需要将不同模块或服务之间的调用关系解耦的场景。
  2. 事件驱动架构:适用于基于事件驱动的系统设计,如微服务架构中的事件通知。
  3. 异步处理:适用于需要异步处理事件的场景,以提高系统的响应速度。

遇到的问题及解决方法

问题:事务提交后,Guava EventBus 发布的事件没有被处理

原因

  1. 事务未正确提交:如果事务未正确提交,事件可能不会被发布。
  2. 事件订阅者未正确注册:如果事件订阅者未正确注册到 EventBus,事件将不会被处理。
  3. 异步事件处理问题:如果使用异步事件处理,可能存在线程池配置问题或任务队列溢出等问题。

解决方法

  1. 确保事务正确提交
  2. 确保事务正确提交
  3. 确保事件订阅者正确注册
  4. 确保事件订阅者正确注册
  5. 处理异步事件问题
    • 检查线程池配置,确保线程池大小和队列容量足够。
    • 使用 AsyncEventBus 处理异步事件:
    • 使用 AsyncEventBus 处理异步事件:

参考链接

通过以上内容,您可以了解 Guava EventBus 和事务结合使用的基础概念、优势、类型、应用场景以及常见问题的解决方法。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Go 中类 Guava EventBus 实现

使用Java时可以用 Google Guava EventBus 来轻松实现,但是在go中暂无相似类库(可能有我不知道)。...文中代码都放在 https://github.com/kakisong/eventbus-go 设计 由于goroutine天生优势,所以在消息转发过程会非常方便。...所以这里简单分为两个步骤: 监听函数注册 接收到消息回调各个对应监听函数 实现 监听函数注册 由于我们想实现是根据接收到消息类型来决定消息转发对应函数,这样使用起来就很方便,只需要确定监听消息类型即可注册使用...go反射效率不高,所以这里存放反射对象 监听并转发消息 完成了监听函数注册之后,接下来就是对发送过来消息进行处理 定义一个普通channel,缓冲大小为100 var msgChan = make...来实现消息监听与消费,对外暴露只有两个方法,我们不用去定义topic,不用去处理通道,由消息类型来控制回调监听函数,在项目中轻量级使用应该是开箱即用

2.1K92

【死磕Sharding-jdbc】---路由&执行

:最终就是在目标数据库表上执行PreparedStatementexecute***()方法;且在执行前会利用google-guavaEventBus发布BEFORE_EXECUTE事件(执行完成...EventBus.post()提交事件 for (AbstractExecutionEvent event : events) { EventBusInstance.getInstance()...().post(each); } 接下来需要对并行执行得到结果集进行merge,下面的sharding-jdbc源码分析系列文章继续对其进行分析; EventBus 说明:EventBus是google-guava...提供消息发布-订阅类库; google-guavaEventBus正确打开姿势: 发布事务:调用EventBuspost()–sharding-jdbc中发布事务:EventBusInstance.getInstance...().post(each); 订阅事务:调用EventBusregister()–sharding-jdbc中注册事务:EventBusInstance.getInstance().register(

90730
  • JAVA | Guava EventBus 使用 发布订阅模式

    异常处理 总结 参考 --- 前言 EventBusGuava 事件处理机制,是观察者模式(生产/消费模型)一种实现。...> 引入依赖,这里我们主要使用 com.google.common.eventbus.EventBus 类进行操作,其提供了 register、unregister、post...(1); eventBus.post(2); eventBus.post("3"); 运行结果为 EventListener#listenInteger ->1 EventListener#listenInteger...,比如事务处理 EventBus 部分源码 public class EventBus { private static final Logger logger = Logger.getLogger...异步使用 通过上面的源码,可以看出只要将构造方法中 executor 换成一个线程池实现即可, 同时 Guava EventBus 为了简化操作,提供了一个简化方案即 AsyncEventBus EventBus

    7.9K10

    Egg 中获取 POST 提交数据

    用过Koa码农都知道,在Koa中获取POST提交数据需要配置第三方中间件,而Egg继承于Koa,在这一方面做了优化,获取POST提交数据不需要再配置其它中间件了,并添加了安全机制 CSRF 防范...,在Egg中获取用户提交POST数据主要有以下两种方法。...第一种:在用户访问需要POST提交数据页面时,返回CSRF密钥,当用户提交数据时,将CSRF密钥一起返回,以下是具体实现。 1. 在router.js中配置路由。...this.ctx.csrf 用户访问这个页面的时候生成一个密钥 await this.ctx.render('home', { // 将密钥返回用户端,让用户提交返回... 第二种:在中间件中配置全局CSRF密钥,在需要提交POST数据页面添加一个隐藏表单域,当用户提交时,将CSRF密钥一起返回

    1.6K30

    Guava - EventBus(事件总线)

    Guavaguava-libraries中为我们提供了事件总线EventBus库,它是事件发布订阅模式实现,让我们能在领域驱动设计(DDD)中以事件弱引用本质对我们模块和领域边界很好解耦设计。...不再多废话,直奔Guava EventBus主题。...首先Guava为我们提供了同步事件EventBus和异步实现AsyncEventBus两个事件总线,他们都不是单例,官方理由是并不想我们我们使用方式。...订阅 首先EventBus为我们提供了register方法来订阅事件,Guava在这里实现很友好,我们不需要实现任何额外接口或者base类,只需要在订阅方法上标注上@Subscribe和保证只有一个输入参数方法就可以搞定...正在这里对于Guava对于事件发布,是依据上例中订阅方法方法参数类型决定,换而言之就是post传入类型和其基类类型可以收到此事件。

    1.4K20

    Google EventBus 使用详解

    EventBus是Google.Guava提供消息发布-订阅类库,它实现了观察者设计模式,消息通知负责人通过EventBus去注册/注销观察者,最后由消息通知负责人给观察者发布消息。...,只能使用Integer,不能使用int,否则handlersByTypeClass会是int而不是Intege * 而传入int msg参数在post(int msg)时候会被包装成Integer...String方法会被调用 EventBusCenter.post("post string method"); EventBusCenter.post(123);...EventBus使用注意问题: 1.代码可读性很差,项目中使用时候,从post地方,查询handle使用,都是使用ide搜索服务,问题很难定位,不如普通接口调用方便查询; 2....由于EventBus是将消息队列放入到内存中,listener消费这个消息队列,故系统重启之后,保存或者堆积在队列中消息丢失。

    70130

    初探Google Guava

    所以guava在程序性能优化上下了不少工夫,我们称其为单块架构利器 我认为强大有几点:1.集合处理   2.EventBus消息总线处理  3.guava cache 单机缓存处理  4.并发listenableFutrue...反射[Reflection] Guava Java 反射机制工具类 1.Guava EventBus探讨 在设计模式中, 有一种叫做发布/订阅模式, 即某事件被发布, 订阅该事件角色将自动更新。...首先单块架构就是在一个进程内, 在一个进程内, 我们还是希望模块与模块之间(功能与功能之间)是松耦合,而在一个模块中是高度内聚, 如何降低一定耦合, 使得代码更加有结构, guava eventbus...如果认为缓存数据总是在固定时候变得陈旧不可用,这种回收方式是可取。...ListenableFuture创建 对应JDK中 ExecutorService.submit(Callable) 提交多线程异步运算方式,Guava 提供了ListeningExecutorService

    1.1K20

    数据库事务提交才发送MQ消息解决方案

    项目场景: 在项目开发中常常会遇到在一个有数据库操作方法中,发送MQ消息,如果这种情况消息队列效率比较快,就会出现数据库事务还没提交,消息队列已经执行业务,导致不一致问题。...举个应用场景,我们提交一个订单,将流水号放在MQ里,MQ监听到就会查询订单去做其它业务,如果这时候数据库事务还没提交,也就是没生成订单流水,MQ监听到消息就去执行业务,查询订单,肯定会出现业务不一致问题...问题描述 最近遇到一个业务场景,类似于下单过程,场景是用户注册消息,注册成功,会发送MQ消息,MQ监听到消息,会查询用户信息,如何再做其它业务,但是遇到一个问题,就是mq消费消息速度是快于数据库事务提交...void afterCommit() { // 发送消息给MQ sendMQMessage(); } }); } 测试一下,通过日志可以看出事务已经提交了...,控制数据库事务提交,才执行发送MQ消息 补充: 如果执行出现java.lang.IllegalStateException: Transaction synchronization is not

    97540

    找出未提交MySQL线程事务

    找出未提交MySQL线程/事务: SELECT * from information_schema.processlist;   这个能看到上面哪个SQL线程ID(下图378号线程就是造成MDL锁罪魁祸首...补充: 场景三: 通过show processlist看不到TableA上有任何操作,在information_schema.innodb_trx中也没有任何进行中事务。...这很可能是因为在一个显式事务中,对TableA进行了一个失败操作(比如查询了一个不存在字段),这时事务没有开始,但是失败语句获取到锁依然有效,没有释放。...也就是说除了语法错误,其他错误语句获取到锁在这个事务提交或回滚之前,仍然不会释放掉。...,因为错误语句根本不会被记录到二进制日志。

    2.4K20

    MySQL找出未提交事务信息

    ---- 我们经常会碰到这样情况,某个事务执行完了未提交,后续再来一个DDL和DML操作,导致后面的session要么处于waiting for metadata lock,要么是锁等待超时...这时我们往往只能找到这个未提交事务事务id和session id,但是一般都处于sleep状态,不好分析事务内容到底是什么,所以通常都是粗鲁地kill这个session解决问题,但是应用层研发人员往往找不到到底是哪个事务引起...一、processlist中提交事务 对于一个执行完但未提交事务,无法在show processlist输出中找到该信息: -- session 1 mysql> set autocommit...二、information_schema.innodb_trx中提交事务 同样,information_schema.innodb_trx.trx_query也为NULL,无法提供未提交事务...MySQL如何找出未提交事务信息

    4.8K21

    四种常见 POST 提交数据方式

    其中 POST 一般用来向服务端提交数据,本文主要讨论 POST 提交数据几种方式。 我们知道,HTTP 协议是以 ASCII 码传输,建立在 TCP/IP 协议之上应用层规范。...application/x-www-form-urlencoded 这应该是最常见 POST 提交数据方式了。...大部分服务端语言都对这种方式有很好支持。例如 PHP 中_POST[‘sub’] 可以得到 sub 数组。 很多时候,我们用 Ajax 提交数据时,也是使用这种方式。...multipart/form-data 这又是一个常见 POST 数据提交方式。我们使用表单上传文件时,必须让 form enctyped 等于这个值。...实际上,现在越来越多的人把它作为请求头,用来告诉服务端消息主体是序列化 JSON 字符串。

    2.1K10
    领券