Error with channels and celery

82 views
Skip to first unread message

Sergio Lopez

unread,
Apr 18, 2018, 4:05:23 AM4/18/18
to Django users

I'm trying to create a chat that when it meets the condition of "hola" is sent by a task in celery. However, when it enters the condition the status is not updated, can someone help me?

I leave my code, please help!

Mi error is:

raise OSError(err, 'Connect call failed %s' % (address,)) ConnectionRefusedError: [Errno 10061] Connect call failed ('::1', 6379)

consumers.py

    import json
from channels.generic.websocket import AsyncWebsocketConsumer
from .tasks import MensajeAlGrupo

class Consumidor(AsyncWebsocketConsumer):
    async def connect(self):
        # Join room group
        await self.channel_layer.group_add(
            'grupo',
            self.channel_name
        )
        await self.accept()

    async def disconnect(self, close_code):
        await self.channel_layer.group_discard(
            'grupo',
            self.channel_name
         )

    # Receive message from WebSocket
    async def receive(self, text_data):
        text_data_json = json.loads(text_data)
        message = text_data_json['message']
        if str(message) == "hola":
            MensajeAlGrupo.delay()
        else:

            # Send message to room group
            await self.channel_layer.group_send(
                'grupo',
                {
                    'type': 'chat_message',
                    'message': message
                }
            )

    # Receive message from room group
    async def chat_message(self, event):
        message = event['message']

        # Send message to WebSocket
        await self.send(text_data=json.dumps({
            'message': message
        }))

Tasks.py

    #De celery
from Filtros.celery import app
from channels.layers import get_channel_layer


@app.task()
def MensajeAlGrupo():
    channel_layer = get_channel_layer()
    async_to_sync(channel_layer.group_send)(
        'grupo',
        {"type": "chat.message", "message": "Hello World"},
    )

celery.py

    #De celery
from __future__ import absolute_import, unicode_literals
import os
from celery import Celery

# set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'Filtros.settings')

app = Celery('Proyecto')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()

app.conf.update(
    BROKER_URL = 'redis://127.0.0.1:6379/0',
)

Please help me, thx!

Sorry for my english :s

Melvyn Sopacua

unread,
Apr 19, 2018, 5:45:31 PM4/19/18
to django...@googlegroups.com
On woensdag 18 april 2018 10:05:23 CEST Sergio Lopez wrote:

> Mi error is:
>
> raise OSError(err, 'Connect call failed %s' % (address,))
> ConnectionRefusedError: [Errno 10061] Connect call failed ('::1', 6379)

Somewhere you have configured the redis connection to [::1] (IPv6) or localhost
(and your OS set to prefer IPv6).

> app.conf.update(
> BROKER_URL = 'redis://127.0.0.1:6379/0',)

But not there, apparently.
--
Melvyn Sopacua
Reply all
Reply to author
Forward
0 new messages