Apache rocketmq

Clone this repo:
  1. c9e5210 fix:fix event type list error. by 2011shenlin · 2 weeks ago main
  2. bcb2329 doc:upgrade the quick start doc. by 2011shenlin · 5 months ago
  3. de41d18 Update RocketMQEventDataAPIImpl.java by Shen Yi · 5 months ago
  4. 4d66b0f refactor: fix PushRetryStrategyEnum#parse(String), and some code style optimization of module common (#171) by Dylan Li · 5 months ago
  5. 1cc7723 build(deps-dev): bump junit:junit in /adapter/benchmark (#144) by dependabot[bot] · 6 months ago

Apache RocketMQ EventBridge

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.

Architecture

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 environments
    • persistence 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.
    • model:The core properties and behaviors of model on EventBridge.
    • service: The domain services which across multiple domains.
  • start

Quick 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.

Deploy Apache RocketMQ

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

Deploy Apache RocketMQ EventBridge

  • Download EventBridge Binary Package

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
  • Start EventBridge

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.

Demo

  • 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.