progress on kafka

This commit is contained in:
lennyaiko
2025-04-10 14:43:35 +01:00
parent 34cba74580
commit a2e4daa4e7
4 changed files with 43 additions and 38 deletions
+1 -12
View File
@@ -1,20 +1,9 @@
from app import create_app from app import create_app
from app.integrations import KafkaIntegration from app.integrations import KafkaIntegration
from app.config import settings
app = create_app() app = create_app()
if __name__ == "__main__": if __name__ == "__main__":
kafka = KafkaIntegration()
if kafka.is_kafka_running():
print("Kafka is running")
else:
print("Kafka is not running")
exit(1)
try:
message = kafka.receive_messages(
topic=
)
app.run(host="0.0.0.0", port=5000, debug=True) app.run(host="0.0.0.0", port=5000, debug=True)
Binary file not shown.
+10 -25
View File
@@ -1,4 +1,4 @@
from confluent_kafka import Consumer from confluent_kafka import Consumer, Producer
import json import json
import logging import logging
from app.config import settings from app.config import settings
@@ -31,7 +31,6 @@ class KafkaIntegration:
def delivery_report(err, msg): def delivery_report(err, msg):
"""Called once for each message produced""" """Called once for each message produced"""
if err is not None: if err is not None:
logger.error(f"Message delivery failed: {err}") logger.error(f"Message delivery failed: {err}")
raise RuntimeError(f"Message delivery failed: {err}") raise RuntimeError(f"Message delivery failed: {err}")
@@ -41,7 +40,7 @@ class KafkaIntegration:
) )
@staticmethod @staticmethod
def receive_messages(topic, timeout=1.0): def receive_disbursement_messages(topic, timeout=1.0):
""" """
Receive messages from a Kafka topic. Receive messages from a Kafka topic.
@@ -66,7 +65,13 @@ class KafkaIntegration:
logger.debug( logger.debug(
f"Received message from {msg.topic()} [{msg.partition()}] @ offset {msg.offset()}: {message_value}" f"Received message from {msg.topic()} [{msg.partition()}] @ offset {msg.offset()}: {message_value}"
) )
return json.loads(message_value) if message_value else None message = json.loads(message_value) if message_value else None
# Call the endpoint if provided
if message:
KafkaIntegration._call_disbursement_endpoint(message)
return message
except Exception as e: except Exception as e:
logger.error(f"Error while receiving message: {e}") logger.error(f"Error while receiving message: {e}")
@@ -76,29 +81,9 @@ class KafkaIntegration:
def close_consumer(): def close_consumer():
"""Shutdown consumer""" """Shutdown consumer"""
consumer = KafkaIntegration._get_consumer() consumer = KafkaIntegration._get_consumer()
consumer.clonse() consumer.close()
logger.info("Kafka consumer closed") logger.info("Kafka consumer closed")
@staticmethod
def is_kafka_running():
"""
Check if Kafka broker is reachable by attempting to fetch metadata.
:return: True if Kafka is running, False otherwise
"""
try:
producer = KafkaIntegration._get_producer()
# Attempt to fetch metadata for a dummy topic
metadata = producer.list_topics(timeout=5)
if metadata.brokers: # If brokers are returned, Kafka is running
logger.info(f"Kafka broker at {settings.KAFKA_BROKER} is running")
return True
else:
logger.warning(f"No brokers found for {settings.KAFKA_BROKER}")
return False
except Exception as e:
logger.error(f"Kafka broker check failed: {e}")
return False
@staticmethod @staticmethod
def _call_disbursement_endpoint( def _call_disbursement_endpoint(
message, endpoint_url="http://localhost:8000/loans/disbursement" message, endpoint_url="http://localhost:8000/loans/disbursement"
+31
View File
@@ -1,7 +1,38 @@
from app import create_app from app import create_app
from app.integrations import KafkaIntegration
from app.config import settings
import logging
app = create_app() app = create_app()
logger = logging.getLogger(__name__)
if __name__ != "__main__": if __name__ != "__main__":
kafka = KafkaIntegration()
while True:
message = kafka.receive_disbursement_messages(
topic=settings.KAFKA_PAYMENT_TOPIC, timeout=1.0
)
if message:
logger.info(f"Processed message: {message}")
else:
logger.info("No message received within timeout")
# try:
# message = kafka.receive_disbursement_messages(
# topic=settings.KAFKA_PAYMENT_TOPIC, timeout=5.0
# )
# if message:
# logger.info(f"Processed message: {message}")
# else:
# logger.info("No message received within timeout")
# except Exception as e:
# print(f"Error: {e}")
# finally:
# kafka.close_consumer()
# Expose WSGI app instance for Gunicorn # Expose WSGI app instance for Gunicorn
wsgi_app = app wsgi_app = app