Skip to content
Snippets Groups Projects
Commit b4043216 authored by Chude, Chiamaka A (PG/T - Comp Sci & Elec Eng)'s avatar Chude, Chiamaka A (PG/T - Comp Sci & Elec Eng)
Browse files

Added docker files to the user and product microservices to create docker...

Added docker files to the user and product microservices to create docker images. Created docker compose file to pull kafka and zookeeper images from docker. Added the user and product microservices to the docker compose file so they can all be on the same docker network. Modified config files to replace kafka host from localhost.
parent 32b11caf
No related branches found
No related tags found
1 merge request!8Added docker files to the user and product microservices to create docker...
Showing
with 140 additions and 17 deletions
version: "3"
services:
zookeeper:
image: wurstmeister/zookeeper
container_name: zookeeper
ports:
- "2182:2182"
networks:
- kafka_network
kafka:
image: wurstmeister/kafka
container_name: kafka
ports:
- "9092:9092"
environment:
KAFKA_ADVERTISED_HOST_NAME: kafka
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_BOOTSTRAP_SEVERS: kafka:9092
networks:
- kafka_network
user-microservice:
image: user-microservice:1.0
container_name: user-microservice
depends_on:
- kafka
- zookeeper
networks:
- kafka_network
product-microservice:
image: product-microservice:1.0
container_name: product-microservice
depends_on:
- kafka
- zookeeper
networks:
- kafka_network
networks:
kafka_network:
driver: bridge
\ No newline at end of file
FROM python:3.11.4
COPY requirements.txt /product_ms/
COPY app /product_ms/
WORKDIR /product_ms
RUN pip install --no-cache-dir -r requirements.txt
RUN apt-get update && apt-get install -y \
unixodbc \
unixodbc-dev \
freetds-dev \
tdsodbc \
&& rm -rf /var/lib/apt/lists/*
# Set environment variables for ODBC configuration if needed
ENV ODBCINI=/etc/odbc.ini
ENV ODBCSYSINI=/etc
CMD ["python", "index.py"]
\ No newline at end of file
...@@ -6,4 +6,4 @@ SECRET_KEY = "Group3" ...@@ -6,4 +6,4 @@ SECRET_KEY = "Group3"
PORT = 5001 PORT = 5001
KAFKA_SERVER= "localhost:9092" KAFKA_SERVER= "kafka:9092"
\ No newline at end of file \ No newline at end of file
No preview for this file type
from flask import Blueprint, jsonify, request, json, session from flask import Blueprint, jsonify, request, json, session
from models.getReviews import get_reviews from models.getReviews import get_reviews
from config import KAFKA_SERVER
from kafka import KafkaProducer from kafka import KafkaProducer
...@@ -30,7 +31,7 @@ def get_review(): ...@@ -30,7 +31,7 @@ def get_review():
return {"error" : "You need to be logged in to add a review"} return {"error" : "You need to be logged in to add a review"}
producer = KafkaProducer(bootstrap_servers = "localhost:9092") producer = KafkaProducer(bootstrap_servers = KAFKA_SERVER)
def send_review_message(reviews): def send_review_message(reviews):
metadata =producer.send("customer_reviews", json.dumps(reviews).encode("utf_8")) metadata =producer.send("customer_reviews", json.dumps(reviews).encode("utf_8"))
......
from kafka import KafkaProducer from kafka import KafkaProducer
from kafka.admin import KafkaAdminClient, NewTopic from kafka.admin import KafkaAdminClient, NewTopic
from config import KAFKA_SERVER
import json import json
producer = KafkaProducer(bootstrap_servers="localhost:9092") producer = KafkaProducer(bootstrap_servers=KAFKA_SERVER)
#Creates the topic #Creates the topic
def create_product_updated_topic(): def create_product_updated_topic():
# Create KafkaAdminClient instance # Create KafkaAdminClient instance
admin_client = KafkaAdminClient(bootstrap_servers="localhost:9092") admin_client = KafkaAdminClient(bootstrap_servers=KAFKA_SERVER)
# Define the topic name and configuration # Define the topic name and configuration
topic_name = "product_updated_topic" topic_name = "product_updated_topic"
......
Flask==3.0.0 Flask==3.0.2
Flask-Cors==4.0.0
gunicorn==21.2.0 gunicorn==21.2.0
boto3==1.29.0 kafka-python==2.0.2
\ No newline at end of file pyodbc==5.1.0
blinker==1.7.0
click==8.1.7
itsdangerous==2.1.2
Jinja2==3.1.2
Werkzeug==3.0.1
boto3==1.34.71
colorama==0.4.6
MarkupSafe==2.1.3
requests==2.31.0
\ No newline at end of file
FROM python:3.11.4
COPY requirements.txt /user_ms/
COPY app /user_ms/
WORKDIR /user_ms
RUN pip install --no-cache-dir -r requirements.txt
RUN apt-get update && apt-get install -y \
unixodbc \
unixodbc-dev \
freetds-dev \
tdsodbc \
&& rm -rf /var/lib/apt/lists/*
# Set environment variables for ODBC configuration if needed
ENV ODBCINI=/etc/odbc.ini
ENV ODBCSYSINI=/etc
CMD ["python", "index.py"]
\ No newline at end of file
...@@ -4,4 +4,6 @@ import os ...@@ -4,4 +4,6 @@ import os
DEBUG = True DEBUG = True
SECRET_KEY = "Group3" SECRET_KEY = "Group3"
PORT = 5000 PORT = 5000
\ No newline at end of file
KAFKA_SERVER = "kafka:9092"
\ No newline at end of file
No preview for this file type
No preview for this file type
...@@ -3,6 +3,8 @@ from models.fetchUsername import get_username ...@@ -3,6 +3,8 @@ from models.fetchUsername import get_username
fetch_username_bp = Blueprint("getUsername",__name__) fetch_username_bp = Blueprint("getUsername",__name__)
#This function is for the product microservice. It makes a call to this
#endpoint to fetch a user's username when they want to add a product review
@fetch_username_bp.route("/user/getUsername", methods=["POST"]) @fetch_username_bp.route("/user/getUsername", methods=["POST"])
def username(): def username():
......
from flask import Blueprint, jsonify, request, json, session, redirect from flask import Blueprint, jsonify, request, json, session, redirect
from config import KAFKA_SERVER
from models.getUsers import fetch_user_info from models.getUsers import fetch_user_info
from kafka import KafkaConsumer from kafka import KafkaConsumer
consumer = KafkaConsumer("review_events", bootstrap_servers='localhost:9092') consumer = KafkaConsumer("review_events", bootstrap_servers=KAFKA_SERVER)
def getusers(user_id): def getusers(user_id):
...@@ -14,5 +15,5 @@ def getusers(user_id): ...@@ -14,5 +15,5 @@ def getusers(user_id):
for message in consumer: for message in consumer:
event_data = json.loads(message.value.decode()) event_data = json.loads(message.value.decode())
user_id = event_data['user_id'] user_id = event_data["user_id"]
username = getusers(user_id) username = getusers(user_id)
\ No newline at end of file
from flask import Blueprint, jsonify, request, session from flask import Blueprint, jsonify, request, session
from kafka import KafkaConsumer from kafka import KafkaConsumer
import json import json
from config import KAFKA_SERVER
show_reviews_bp = Blueprint("showReviews", __name__) show_reviews_bp = Blueprint("showReviews", __name__)
# Kafka consumer configuration # Kafka consumer configuration
consumer_conf = { consumer_conf = {
"bootstrap_servers": "localhost:9092", "bootstrap_servers": KAFKA_SERVER,
"group_id": "show_reviews_group", # Specify a unique group ID for this consumer "group_id": "show_reviews_group", # Specify a unique group ID for this consumer
"auto_offset_reset": "earliest" # Start consuming from the beginning of the topic "auto_offset_reset": "earliest" # Start consuming from the beginning of the topic
} }
# Function to consume reviews from Kafka # Function to consume reviews published by product microservice
def consume_reviews(num_reviews=1): def consume_reviews(num_reviews=1):
consumer = KafkaConsumer("customer_reviews", **consumer_conf) consumer = KafkaConsumer("customer_reviews", **consumer_conf)
reviews = [] reviews = []
......
No preview for this file type
from kafka import KafkaProducer from kafka import KafkaProducer
from kafka.admin import KafkaAdminClient, NewTopic from kafka.admin import KafkaAdminClient, NewTopic
import json from config import KAFKA_SERVER
producer = KafkaProducer(bootstrap_servers="localhost:9092") import json
producer = KafkaProducer(bootstrap_servers=KAFKA_SERVER)
#Creates the topic
def create_profile_updated_topic(): def create_profile_updated_topic():
# Create KafkaAdminClient instance # Create KafkaAdminClient instance
admin_client = KafkaAdminClient(bootstrap_servers="localhost:9092") admin_client = KafkaAdminClient(bootstrap_servers=KAFKA_SERVER)
# Define the topic name and configuration # Define the topic name and configuration
topic_name = "profile_updated_topic" topic_name = "profile_updated_topic"
...@@ -27,7 +29,8 @@ def create_profile_updated_topic(): ...@@ -27,7 +29,8 @@ def create_profile_updated_topic():
admin_client.create_topics(new_topics=[new_topic], validate_only=False) admin_client.create_topics(new_topics=[new_topic], validate_only=False)
#Function is called in updateProfileControllers.py
#Topic message is collected from ProductMicroservice/Subsribers/updateUsernameSubscriber.py
def publish_username_updated_event(event_data): def publish_username_updated_event(event_data):
# Serialize the event data to JSON # Serialize the event data to JSON
event_json = json.dumps(event_data) event_json = json.dumps(event_data)
......
Flask==3.0.0 Flask==3.0.2
Flask-Cors==4.0.0
gunicorn==21.2.0 gunicorn==21.2.0
boto3==1.29.0 kafka-python==2.0.2
\ No newline at end of file pyodbc==5.1.0
blinker==1.7.0
click==8.1.7
itsdangerous==2.1.2
Jinja2==3.1.2
Werkzeug==3.0.1
boto3==1.34.71
colorama==0.4.6
MarkupSafe==2.1.3
requests==2.31.0
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment