GoverEvetBus 是一个历经四年生产环境验证的事件驱动架构框架,通过事件总线机制来治理微服务间的远程过程调用。使用本地事务来支持微服务内强一致性,事件总线来实现微服务间的最终一致性,另外还提供了事件发布/订阅失败的自动补偿机制。
执行流安装初始化dbcreatetablecompesate_leader(amevarchar(16)otullprimarykey,term_startbigitusigedotull,term_edbigitusigedotull,trasitio_periodbigitusigedotull,leader_idvarchar(100)otull,versioitusigedotull);createtablepublish_evet(idbigitusigedauto_icremetprimarykey,evet_amevarchar(100)otull,evet_datamediumtextotull,statussmallitusigedotull,published_timebigitusigeddefault0otull,versiosmallitusigedotull,create_timebigitusigedotull);createidexidx_statusopublish_evet(status);createtablepublish_evet_compesate(idbigitusigedauto_icremetprimarykey,publish_evet_idbigitusigedotull,start_timebigitusigedotull,takebigitusigedotull,failed_msgtextull);createtablepublish_evet_failed(idbigitusigedauto_icremetprimarykey,publish_evet_idbigitusigedotull,failed_msgtextotull,create_timebigitusigedotull);createtablesubscribe_evet(idbigitusigedauto_icremetprimarykey,subscribe_amevarchar(100)otull,statussmallitusigedotull,subscribe_timebigitusigedotull,evet_idbigitusigedotull,evet_amevarchar(100)otull,evet_datamediumtextotull,evet_create_timebigitusigedotull,versiosmallitusigedotull,create_timebigitusigedotull,costraituk_subscribe_ame_eve_id_evet_ameuique(subscribe_ame,evet_id,evet_ame));createidexidx_statusosubscribe_evet(status);createtablesubscribe_evet_compesate(idbigitusigedauto_icremetprimarykey,subscribe_evet_idbigitusigedotull,start_timebigitusigedotull,takeitusigedotull,failed_msgtextull);createtablesubscribe_evet_failed(idbigitusigedauto_icremetprimarykey,subscribe_evet_idbigitusigedotull,failed_msgtextotull,create_timebigitusigedotull);isertitocompesate_leader(ame,term_start,term_ed,trasitio_period,leader_id,versio)values('publish_leader',0,0,0,'',0);isertitocompesate_leader(ame,term_start,term_ed,trasitio_period,leader_id,versio)values('subscribe_leader',0,0,0,'',0);GradlevalevetbusVersio="0.9.2";implemetatio("me.ahoo.evetbus:evetbus-sprig-boot-starter:${evetbusVersio}")implemetatio("me.ahoo.evetbus:evetbus-sprig-boot-autocofigure:${evetbusVersio}"){capabilities{requireCapability("me.ahoo.evetbus:rabbit-bus-support")//requireCapability("me.ahoo.evetbus:kafka-bus-support")}}Mave<?xmlversio="1.0"ecodig="UTF-8"?><projectxmls="https://mave.apache.org/POM/4.0.0"xmls:xsi="https://www.w3.org/2001/XMLSchema-istace"xsi:schemaLocatio="https://mave.apache.org/POM/4.0.0https://mave.apache.org/xsd/mave-4.0.0.xsd"><modelVersio>4.0.0</modelVersio><artifactId>demo</artifactId><properties><evetbus.versio>0.9.2</evetbus.versio></properties><depedecies><depedecy><groupId>me.ahoo.evetbus</groupId><artifactId>evetbus-sprig-boot-starter</artifactId><versio>${evetbus.versio}</versio></depedecy><depedecy><groupId>me.ahoo.evetbus</groupId><artifactId>evetbus-rabbit</artifactId><versio>${evetbus.versio}</versio></depedecy><!--<depedecy>--><!--<groupId>me.ahoo.evetbus</groupId>--><!--<artifactId>evetbus-kafka</artifactId>--><!--<versio>${evetbus.versio}</versio>--><!--</depedecy>--></depedecies></project>SprigBootApplicatioCofigsprig:applicatio:ame:evetbus-demodatasource:url:jdbc:mysql://localhost:3306/evetbus_db?serverTimezoe=GMT%2B8&characterEcodig=utf-8userame:rootpassword:rootrabbitmq:host:localhostuserame:evetbuspassword:evetbusgover:evetbus:rabbit:exchage:evetbuscompesate:db:publish:schedule:iitial-delay:30period:10subscribe:schedule:iitial-delay:30period:10eabled:truesubscriber:prefix:${sprig.applicatio.ame}.快速上手一般情况下 Publisher 与 Subscriber 不在同一个应用服务内。这里只是作为演示用途。
Demo
Publisher/***定义发布事件*/publicclassOrderCreatedEvet{privatelogorderId;publicloggetOrderId(){returorderId;}publicvoidsetOrderId(logorderId){this.orderId=orderId;}@OverridepublicStrigtoStrig(){retur"OrderCreatedEvet{"+"orderId="+orderId+'}';}}packageme.ahoo.evetbus.demo.service;importme.ahoo.evetbus.core.aotatio.Publish;importme.ahoo.evetbus.demo.evet.OrderCreatedEvet;importorg.sprigframework.stereotype.Service;/***@authorahoowag*/@ServicepublicclassOrderService{@PublishpublicOrderCreatedEvetcreateOrder(){OrderCreatedEvetorderCreatedEvet=ewOrderCreatedEvet();orderCreatedEvet.setOrderId(1L);returorderCreatedEvet;}}Subscriberpackageme.ahoo.evetbus.demo.service;importlombok.exter.slf4j.Slf4j;importme.ahoo.evetbus.core.aotatio.Subscribe;importme.ahoo.evetbus.demo.evet.OrderCreatedEvet;importorg.sprigframework.stereotype.Service;@Slf4j@ServicepublicclassNoticeService{@SubscribepublicvoidhadleOrderCreated(OrderCreatedEvetorderCreatedEvet){log.ifo("hadleOrderCreated-evet:[{}].",orderCreatedEvet);/***执行相应的业务代码*sedsms/email?*/}}
评论