> For the complete documentation index, see [llms.txt](https://marblejs.gitbook.io/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://marblejs.gitbook.io/docs/other/api-reference/messaging/eventbus.md).

# eventBus

### **Importing** <a href="#importing" id="importing"></a>

```typescript
import { eventBus } from '@marblejs/messaging';
```

### **Type declaration**

```haskell
eventBus :: EventBusConfig
  -> Reader<Context, Promise<TransportLayerConnection>>
```

### **Parameters**

| *parameter* | definition       |
| ----------- | ---------------- |
| *config*    | `EventBusConfig` |

#### ***EventBusConfig***

| ***parameter*** | definition                      |
| --------------- | ------------------------------- |
| *listener*      | \<optional> `MessagingListener` |

{% hint style="warning" %}
Because of asynchronous nature of messaging client, all related readers have to be bound to server creators via eager binding 👉 [#bindEagerlyTo](/docs/other/api-reference/core/bindeagerlyto.md)
{% endhint %}

To learn more about `eventBus` usage please visit:

{% content-ref url="/pages/-M-RdbkPqCRMgipLWj8i" %}
[CQRS](/docs/messaging/cqrs.md)
{% endcontent-ref %}

### Example

The event bus can be attached to server creator, like basic HTTP or any other microservice.

`@marblejs/messaging` module exposes already existing messaging client for `eventBus` transport layer:

```typescript
import { eventBus } from '@marblejs/messaging';
```

Additionally it exports tokens for both `EventBus` and `EventBusClient` instances.

```typescript
import { EventBusToken, EventBusClientToken } from '@marblejs/messaging';
```

```typescript
import { httpListener, createServer, bindEagerlyTo } from '@marblejs/core';
import { messagingListener, EventBusToken, EventBusClientToken, eventBusClient, eventBus } from '@marblejs/messaging';
​
const eventBusListener = messagingListener(...);
const listener = httpListener(...);
​
export const server = createServer({
  listener,
  dependencies: [
    bindEagerlyTo(EventBusClientToken)(eventBusClient),
    bindEagerlyTo(EventBusToken)(eventBus({ listener: eventBusListener })),
  ],
});
​
const main: IO<void> = async () =>
  await (await server)();
​
main();
```
