77from confluent_kafka import Message , Producer
88from confluent_kafka .error import KafkaError
99
10+ from app .core .lifecycle import LifecycleEnabled
1011from app .core .logging import logger
1112from app .core .metrics .context import get_event_metrics
1213from app .domain .enums .kafka import KafkaTopic
1314from app .events .schema .schema_registry import SchemaRegistryManager
1415from app .infrastructure .kafka .events import BaseEvent
1516from app .infrastructure .mappers .dlq_mapper import DLQMapper
17+ from app .settings import get_settings
1618
1719from .types import ProducerConfig , ProducerMetrics , ProducerState
1820
1921DeliveryCallback : TypeAlias = Callable [[KafkaError | None , Message ], None ]
2022StatsCallback : TypeAlias = Callable [[dict [str , Any ]], None ]
2123
2224
23- class UnifiedProducer :
25+ class UnifiedProducer ( LifecycleEnabled ) :
2426 def __init__ (
2527 self ,
2628 config : ProducerConfig ,
@@ -36,6 +38,8 @@ def __init__(
3638 self ._metrics = ProducerMetrics ()
3739 self ._event_metrics = get_event_metrics () # Singleton for Kafka metrics
3840 self ._poll_task : asyncio .Task | None = None
41+ # Topic prefix (for tests/local isolation); cached on init
42+ self ._topic_prefix = get_settings ().KAFKA_TOPIC_PREFIX
3943
4044 @property
4145 def is_running (self ) -> bool :
@@ -190,7 +194,7 @@ async def produce(
190194 # Serialize value
191195 serialized_value = self ._schema_registry .serialize_event (event_to_produce )
192196
193- topic = str (event_to_produce .topic )
197+ topic = f" { self . _topic_prefix } { str (event_to_produce .topic )} "
194198 self ._producer .produce (
195199 topic = topic ,
196200 value = serialized_value ,
@@ -257,7 +261,7 @@ async def send_to_dlq(
257261
258262 # Send to DLQ topic
259263 self ._producer .produce (
260- topic = str (KafkaTopic .DEAD_LETTER_QUEUE ),
264+ topic = f" { self . _topic_prefix } { str (KafkaTopic .DEAD_LETTER_QUEUE )} " ,
261265 value = serialized_value ,
262266 key = original_event .event_id .encode () if original_event .event_id else None ,
263267 headers = [
@@ -269,7 +273,9 @@ async def send_to_dlq(
269273 )
270274
271275 # Record metrics
272- self ._event_metrics .record_kafka_message_produced (str (KafkaTopic .DEAD_LETTER_QUEUE ))
276+ self ._event_metrics .record_kafka_message_produced (
277+ f"{ self ._topic_prefix } { str (KafkaTopic .DEAD_LETTER_QUEUE )} "
278+ )
273279 self ._metrics .messages_sent += 1
274280
275281 logger .warning (
0 commit comments