fanout / django-eventstream

Server-Sent Events for Django
MIT License
664 stars 88 forks source link

Support for django-rq #131

Closed kaimcpheeters closed 1 year ago

kaimcpheeters commented 1 year ago

When I call django_eventstream.send_event directly from a view the event gets sent (main).

image

However, when I call django_eventstream.send_event from a django RQ enqueued function the event never gets sent (worker). image

from rest_framework import viewsets
from rest_framework.response import Response
import django_eventstream
import django_rq

class TestMainViewSet(viewsets.ViewSet):
    def list(self, request):
        data = {'message': 'Sending a event with value: main'}
        django_eventstream.send_event('test', 'message', 'main')
        return Response(data)

def test_job():
    django_eventstream.send_event('test', 'message', 'worker')

class TestWorkerViewSet(viewsets.ViewSet):
    def list(self, request):
        queue = django_rq.get_queue('default')
        queue.enqueue(test_job)
        data = {'message': 'Sending a event with value: worker'}
        return Response(data)

I've made a project that replicates this issue: https://github.com/kaimcpheeters/django-eventstream-rq

requirements.txt

Django==4.2.1
djangorestframework==3.14.0
channels==3.0.5
django-eventstream==4.5.1
django-rq==2.8.1

Are there any known reasons for why django_eventstream doesn't work with django-rq? Is there a work around?

kaimcpheeters commented 1 year ago

Looks like this is probably the answer #130