分布式设计模式-事务发件箱2(发布数据方式)

事务发件箱请模式请参考:传送门html

发送数据的两种方式

  • 轮询发布数据
  • 事务日志拖尾

轮询发布数据

能够经过线程一直循环查询OUTBOX操做,也能够使用定时任务循环查询OUTBOX表,将这些消息发送给消息代理,最后把完成的发送的消息从OUTBOX表中删除。git

例如sqlgithub

select * from outbox order by id

begin
delete from outbox where id in (...)
commit
复制代码

轮询数据库是一种在小规模下运营良好的简单方法。以弊端是常常轮询数据库可能形成昂贵的开销(致使数据库性能降低)。sql

事务日志拖尾

每次应用程序提交到数据库的更新都对应着数据库书屋日志中的一个条目。事务日志挖据器能够读取事务日志,把每条跟小学有关的记录发送给小学代理,下图展现了这个方案的具体实现方式。 数据库

transaction-log-miner读取事务日志的条目,它将对应于插入小学的每一个相关的日志条目转换为消息,并将消息发布到消息代理。这个方案有一些实际的应用案例和实现可供参考。bash

  • Debezium:一个开源项目,它能够向kafka消息代理发布消息更改
  • LinkedIn Databus: 一个开源项目,用于挖掘Oracle事务日志文件并将更爱发布为事件。
  • DynamoDb streams:包含过去24小时内的DynamoDB表更改的序列,而且这个序列是按时间排序的。应用程序能够从流中读取这些更改。
  • Eventuate Tram:它使用MYSQL binlog协议、Postgres WAL 或轮询来读取对OUTBOX表所作的更改并将它们发布到kafka。
相关文章
相关标签/搜索