项目介绍:
项目模拟交易所,进行证券之类的交易,在撮合交易中:添加委托,更新委托,添加成交,添加或者更新持仓,会频繁进行数据库操作。防止在频繁操作数据库的过程中,数据库处理不完,导致报错,然后抛出异常,数据丢失的问题。也考虑到项目以后会使用 kafka 作为总线,进行数据交互,所以在此阶段,db 操作直接使用 kafka,以后稍作改动即可。
总体思想:
1.在消息发送过来进行数据库操作的时候,我们不进行数据库操作,而是使用 kafka 发送消息到 kafka
2.kafka 消费者,消费到消息之后,进行具体的数据库操作,插入或者更新数据库,如果出错,目前是打印日志,进行记录
生产者:
kafka 生产者主要是发送消息到 kafka ,有 kafka 的 topic,key 和 value 值
消费者:
思路:
1.项目启动时,启动 kafka 的监听器类:KafkaConsumeLinstener
2.kafka 的监听器,调用 kafka 的线程类:KafkaConsumeRunnable
3.kafka 的线程类,run 方法,启动 kafka 消费者,并调用接口 IKafkaDataConsumer 的方法来实现 kafka 消息的处理
4.kafka 的具体消息处理类 KafkaDataConsumer 实现 接口 IKafkaDataConsumer
消息处理类:
接口和实现类
注意点:处理消息的方法 dealKafkaMessage 套层try catch自己来处理异常,不要抛出。抛出异常线程死掉,kafka接收到消息了,但是不会消费消息。看日志会发现,kafka 意识到有消息要处理,但是指向消息的指针不会发生变化。(不知道是不是因为线程使用的是 Runnable 的原因,Runnable 不会抛出异常,而 callable 可以抛出异常)
————————————————
版权声明:本文为CSDN博主「wang_xiaozao」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u010343544/article/details/78427345