RocketMQ EventBridge is a subproject of rocketmq to make it easier to build event-driven applications. In addition, rocketmq-eventbridge can route events between many services and applications based on the standard CloudEvents 1.0 specification. Users can use rocketmq-eventbridge to build loosely coupled and distributed event-driven architectures.
Events are sent to the event bus in two ways: 1) Push events through the SDK or Webhook actively; 2) Pulled events by eventbridge passively. Events obtained in both ways will be stored on the event bus. EventBus is the core concept in EventBridge, which allows you to subscribe to the events, filter the events, and push to the specified target by creating the event rule. The event on the event bus is stored by rocketmq. Through rocketmq-connect, we can pull the event from the register source to the event bus, or push the events from the event bus to the registered target.
The code architecture of EventBridge include 4 core modules:
adapter
Adapt to different operating environmentspersistence
Implement the repository API in the domain layer and persist the model data.api
The open API provided by EventBridge.rpc
Implement the rpc API in the domain layer to adapter the run environment.common
The common code of all modules.domain
The core code of EventBridge.start
RocketMQ EventBridge rely on a message service to store the event, and needs one connect service to collect or forward events.Here, we choose the Apache RocketMQ as our message service, and choose the Apache RocketMQ Connect as our connect service.Of course, you can also choose other alternative services. Eventbridge do not limit it. You only need to provide the relevant adapter API implementation.
Apache RocketMQ is a great messaging service,and we choose it as our message service.You can deploy the apache rocketmq according to the manual: RocketMQ Quick Start
You can download it from here EventBridge binary package: rocketmq-eventbridge-xxx-bin-release.zip. After downloading, unzip it. You will get a directory as follows:
/rocketmq-eventbridge-xxx-bin-release/ |——bin | |——runserver.sh | |——eventbridge.sh |——config | |——application.properties |——plugin | |——eventbridge-connect-file-with-dependencies.jar | |——connect-filter-transform-with-dependencies.jar | |——connect-eventbridge-transform-with-dependencies.jar |——rocketmq-eventbridge.jar
Config
Before running, we need to configure the running environment of EventBridge and modify the RocketMQ nameserver connection address in config/application.properties.
rocketmq.namesrvAddr=localhost:9876
Note: The downloaded EventBridge binary package may not have permission to execute. You can authorize it in advance through chmod.
sh bin/eventbridge.sh start
The default log directory is ~/rocketmq-eventbridge/rocketmq-eventbridge.log. You can modify log.path and app.name in config/application.properties to observe whether the service starts normally through the log.
Put Events to EventBus
When the service is started, the system will initialize an EventBus named “demo-bus” by default, and create a rule under the Bus by default to subscribe to all events on the Bus and push and write them to a local file. So we can test and verify in the following ways:
curl -X POST http://127.0.0.1:7001/putEvents \ -H "Content-Type: application/json; charset=UTF-8" \ -H "ce-specversion:1.0" \ -H "ce-type:com.github.pull_request.opened" \ -H "ce-source:https://github.com/cloudevents/spec/pull" \ -H "ce-subject:demo" \ -H "ce-id:1234-1234-1234" \ -H "ce-datacontenttype:application/json" \ -H "ce-time:2018-04-05T17:31:00Z" \ -H "ce-eventbusname:demo-bus" \ -d 'A test event.'
Check whether the event is successfully written to the target end of the Rule subscription
The Rule created by default will write data to the local file “~/demo”. You can judge whether the event sent is successfully delivered to the target by viewing the file content.
root % tail -f ~/demo A test event. A test event. A test event.