Thanks Andrew this helps me as well. There is a missing piece I don't understand yet. In my management command, then I probably will have to use `async_to_sync(channel_layer.group_send)` to send the message to consumers (right?). The only problem is that whenever I use async_to_sync it creates a new connection to redis every single time. I now use channels_redis v2.3.1 and in this version I don't get excessive connections but still it opens a new connection on every send. I was wondering if that is intentional or not in a sync context and if so, how can it be solved.
Thanks again for your great work On Wednesday, February 22, 2017 at 7:55:33 PM UTC+1, Andrew Godwin wrote: > > Hi Jochen, > > Your problem is that if you want to listen to the pubsub channel you will > need a dedicated process to do so, as you can't just poll something like > that. Given that restriction, you're going to have to write something like > a management command that opens a connection to Redis and listens for > messages, and then whenever it gets one, sends the message onto a channel > in the Django channel system. > > You can send to channels from anywhere, so it's just a basic listener with > one line of channel send added. You're likely to want some sort of logic on > these messages, I suspect, so I would send onto a single custom channel and > then, now your messages are in the evented channel system, you can then > write a consumer for that channel and tie it into the routing and handle > any distribution/storage there. > > This keeps the body of your logic inside the Django consumer code, and the > management command nice and simple - it just needs to send onto a custom > channel and not worry about what to do with that data, you can hook that up > later. If you have fields in the message you split out into different > dictionary keys, you can even use the Channels routing options on those > fields - so, for example, you could route everything with a certain task > name to one consumer, and everything else to a catch-all consumer. > > Andrew > > On Wed, Feb 22, 2017 at 6:55 AM, Jochen Breuer <[email protected] > <javascript:>> wrote: > >> Hi! >> >> I'm not entirely sure where to start and I hope you can help me. I'm >> using SaltStack to execute tasks on minions. The results of those jobs >> (that's the term used in Salt) are then published to a job cache. In this >> case its a Redis server (Redis Pubsub). Now I would like to subscribe to a >> specific Redis channel, where the job results are published, with my Django >> (Channels) application. Every time a job result is pushed, I'd also like to >> push a message to a channel in Django. >> >> Where to begin? Do I need to write a new protocol server or just a custom >> channel? Even after reading the docs I'm still lacking overview. Perhaps >> someone can push me into the right direction. Thanks! >> >> Jochen >> >> -- >> You received this message because you are subscribed to the Google Groups >> "Django users" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to [email protected] <javascript:>. >> To post to this group, send email to [email protected] >> <javascript:>. >> Visit this group at https://groups.google.com/group/django-users. >> To view this discussion on the web visit >> https://groups.google.com/d/msgid/django-users/c933a5b5-7b72-4d7d-985a-a311c0f16b26%40googlegroups.com >> >> <https://groups.google.com/d/msgid/django-users/c933a5b5-7b72-4d7d-985a-a311c0f16b26%40googlegroups.com?utm_medium=email&utm_source=footer> >> . >> For more options, visit https://groups.google.com/d/optout. >> > > -- You received this message because you are subscribed to the Google Groups "Django users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at https://groups.google.com/group/django-users. To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/800a3278-ba4b-402d-b8ee-341b999879ba%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.

