|
5 | 5 | from faststream import Logger |
6 | 6 |
|
7 | 7 | # from domains.events import get_topic_registry |
8 | | -from faststream.redis import RedisBroker |
| 8 | +from faststream.redis import RedisRouter, RedisBroker, fastapi |
9 | 9 |
|
10 | 10 | # from faststream.redis.publisher.asyncapi import AsyncAPIPublisher |
11 | 11 | from opentelemetry.instrumentation.faststream import RedisOtelMiddleware |
12 | 12 |
|
| 13 | +from bootstrap.config import EventConfig |
13 | 14 | from domains import event_registry |
14 | 15 |
|
15 | | -from .config import AppConfig |
| 16 | +logger = structlog.getLogger(__name__) |
16 | 17 |
|
17 | 18 |
|
18 | | -def init_broker(config: AppConfig) -> RedisBroker: |
| 19 | +def init_router(config: EventConfig) -> RedisRouter: |
19 | 20 | broker = RedisBroker( |
20 | | - config.EVENTS.REDIS_BROKER_URL, |
| 21 | + config.REDIS_BROKER_URL, |
21 | 22 | middlewares=(RedisOtelMiddleware,), |
22 | 23 | logger=structlog.getLogger("faststream.broker"), |
23 | 24 | ) |
24 | | - register_publishers(broker, config.EVENTS.TOPIC) |
25 | | - register_subscribers(broker, config.EVENTS.TOPIC) |
26 | 25 |
|
27 | | - return broker |
| 26 | + router = RedisRouter() |
| 27 | + register_publishers(router, config.TOPIC) |
| 28 | + if config.IS_SUBSCRIBER: |
| 29 | + register_subscribers(router, config.TOPIC) |
28 | 30 |
|
| 31 | + broker.include_router(router) |
| 32 | + return router |
29 | 33 |
|
30 | | -def register_subscribers(broker, topic: Optional[str] = None): |
31 | | - if topic is not None and topic in event_registry.keys(): |
32 | | - topics_map = {topic: event_registry[topic]} |
33 | | - else: |
34 | | - topics_map = event_registry.copy() |
35 | 34 |
|
36 | | - for topic, event_type in topics_map.items(): |
37 | | - |
38 | | - @broker.subscriber(topic) |
39 | | - async def handler(msg: event_type, logger: Logger) -> None: # type: ignore[valid-type] |
40 | | - logger.info(f"Received message {type(msg)} {msg}") |
41 | 35 |
|
42 | 36 |
|
43 | | -def register_publishers(broker, topic: Optional[str] = None): |
| 37 | +def register_publishers(router: RedisRouter, topic: Optional[str] = None): |
44 | 38 | if topic is not None and topic in event_registry.keys(): |
45 | 39 | topics_map = {topic: event_registry[topic]} |
46 | 40 | else: |
47 | 41 | topics_map = event_registry.copy() |
48 | 42 |
|
49 | 43 | for topic, event_type in topics_map.items(): |
50 | | - broker.publisher(topic, schema=event_registry[topic]) |
51 | | - |
52 | | - |
53 | | -# def init_publishers( |
54 | | -# broker: RedisBroker, |
55 | | -# ) -> Dict[str, AsyncAPIPublisher]: |
56 | | -# return { |
57 | | -# topic: broker.publisher(topic, schema=Union[event_types]) |
58 | | -# for topic, event_types in get_topic_registry().items() |
59 | | -# } |
| 44 | + router.publisher(topic, schema=event_registry[topic]) |
0 commit comments