Files
RedlineTriad e02a02bb20 fix: useEventBus by propagating config to DefaultEventsService
This setting was added by reading from an optional `config` argument.
This was never passed, so `auto` was always assumed.
https://github.com/backstage/backstage/pull/27227/files#diff-cffd40a187b4fc584f03c968517fbacc110bde6a467f2384bbd92b803d3db47eR374-R379

Signed-off-by: RedlineTriad <39059512+RedlineTriad@users.noreply.github.com>
2024-10-21 10:08:45 +02:00

1.9 KiB

@backstage/plugin-events-node

This package defined basic types for event-based interactions inside of Backstage.

Additionally, it provides the core event service eventsServiceRef of type EventsService with its default implementation that uses the DefaultEventsService implementation.

DefaultEventsService is a simple in-memory implementation that requires the co-deployment of producers and consumers of events.

Installation

Add @backstage/plugin-events-node as dependency to your plugin or plugin module package to which you want to add event support.

Use eventsServiceRef as a dependency at your plugin or plugin module.

Legacy Backend System

Create an EventsService instance and add it to the environment.

// packages/backend/src/plugins/events.ts
import { DefaultEventsService } from '@backstage/plugin-events-node';

// ...

function makeCreateEnv(config: Config) {
  // ...
  const eventsService = DefaultEventsService.create({ logger: root, config });
  // ...
  return (plugin: string): PluginEnvironment => {
    // ...
    return {
      // ...
      events: eventsService,
      // ...
    };
  };
}

Use the events from the PluginEnvironment as desired:

// packages/backend/src/plugins/events.ts
export default async function createPlugin(
  env: PluginEnvironment,
): Promise<Router> {
  // ...
  env.events; // ...
  // ...
}

Use Case

Exchange service implementation

Create your custom service factory implementation:

import { eventsServiceRef } from '@backstage/plugin-events-node';
// ...
export const customEventsServiceFactory = createServiceFactory({
  service: eventsServiceRef,
  deps: {
    // add needed dependencies here
  },
  async factory({ logger }) {
    // add your custom logic here
    return customEventsService;
  },
});

and your custom implementation:

// packages/backend/src/index.ts
+  backend.add(customEventsServiceFactory);