This commit is contained in:
46
mm_msg/tasks.py
Normal file
46
mm_msg/tasks.py
Normal file
@ -0,0 +1,46 @@
|
||||
import os
|
||||
import requests
|
||||
from apscheduler.schedulers.background import BackgroundScheduler
|
||||
from django.utils.timezone import now
|
||||
from .models import Message
|
||||
from django.db import transaction
|
||||
|
||||
def send_scheduled_messages():
|
||||
mm_url = os.getenv("MM_URL")
|
||||
# debug
|
||||
# print(mm_url)
|
||||
headers = {"Content-Type": "application/json"}
|
||||
# 트랜잭션 시작
|
||||
with transaction.atomic():
|
||||
# 현재 시간 이전의 메시지 중 is_sent가 False인 메시지를 잠금
|
||||
messages = Message.objects.filter(
|
||||
send_time__lte=now(), is_sent=False
|
||||
).select_for_update()
|
||||
|
||||
for message in messages:
|
||||
try:
|
||||
# 메시지 전송
|
||||
data = {"text": f"{message.title}\n{message.text}"}
|
||||
response = requests.post(mm_url, json=data, headers=headers)
|
||||
|
||||
# 성공적으로 전송되면 is_sent를 True로 업데이트
|
||||
if response.status_code == 200:
|
||||
message.is_sent = True
|
||||
message.save()
|
||||
print(
|
||||
f"Sent message: {message.title}, Response: {response.status_code}"
|
||||
)
|
||||
else:
|
||||
print(
|
||||
f"Failed to send message: {message.title}, Response: {response.status_code}"
|
||||
)
|
||||
|
||||
except Exception as e:
|
||||
print(f"Error sending message: {message.title}, Error: {e}")
|
||||
|
||||
|
||||
scheduler = BackgroundScheduler()
|
||||
# scheduler.add_job(send_scheduled_messages, 'interval', minutes=1) # 1분마다 실행
|
||||
scheduler.add_job(send_scheduled_messages, "interval", seconds=30) # 30초마다 실행
|
||||
|
||||
scheduler.start()
|
Reference in New Issue
Block a user