### 1、内置的路由器

目前事件路由器，分为：默认路由器（基于 hash 实现，速度快）；模式匹配路由器。


| 路由器                       | 主题示例          | 描述                                                       |
| ----------------- | ------------ | ------------------------------------- |
| EventRouterDefault     | `demo.hello`,        | 基于 hash 的路由器（性能好）                              |
| EventRouterPatterned  | `demo.hello.a`, `demo.hello.*`   | 基于模式匹配的路由器（可支持不同模式）     |




### 2、关于默认路由器（EventRouterDefault）

* Hash （监听是什么，收的就是什么）

| 发送主题                    | 监听主题                  | 备注               |
|-------------------------|-----------------------|------------------|
| `event.user.created`    | `event.user.created`  | 支持 ApiBean 的模式调用 |



### 3、关于模式匹配路由器（EventRouterPatterned）

支持路由定制，已实现的有：RoutingPath，路径风格的路由；RoutingTag，标签风格的路由。还可以自己定制

* RoutingPath（`*` 代表一段，`**` 代表不限断）

| 发送主题                  | 监听主题              | 备注  |
|-----------------------|-------------------|-----|
| `event/user/created`  | `event/*/created` |     |
| `event/order/created` | `event/*/created` |     |


* RoutingTag（`:` 为主题与标签的间隔符，`,` 为主题的间隔符）


| 发送主题                             | 监听主题                   | 监听Tag | 是否监听到  |
|----------------------------------|----------------------------|----------|----------|
| `event.user.update`       | `event.user.update`        | 不限 | 是 |
| `event.user.update:id`       | `event.user.update`        | 不限 | 是 |
| `event.user.update`       | `event.user.update:id`        | 不限 | 是 |
| `event.user.update:id` | `event.user.update:id`        |     id     | 是 |
| `event.user.update:id,name ` | `event.user.update:name ` |     name     | 是 |
| `event.user.update:id` | `event.user.update:name`        |     name     | 否 |



### 4、配置应用示例

* 全局范围的配置

```java
//对全局的 `Dami.bus()` 起效
DamiConfig.configure(new EventRouterPatterned(RoutingTag::new));

//监听事件
Dami.bus().listen("demo.hello:a,b", (event) -> {
    System.err.println(event.getPayload());
});

//发送事件
Dami.bus().send("demo.hello", "world");
```

* 局部配置


```java
//对当前实例有效
DamiBus bus = new DamiBusImpl(new EventRouterPatterned(RoutingTag::new));

//监听事件
bus.listen("demo.hello:a,b", (event) -> {
    System.err.println(event.getPayload());
});

//发送事件
bus.send("demo.hello", "world");
```