Перенаправляйте новые сообщения RabbitMQ на веб-клиентов, используя каналы Django - PullRequest
0 голосов
/ 30 апреля 2020

У меня есть приложение карты, которое должно показывать местоположение объектов на карте. Объекты отправляют местоположение в Rabbitmq, и я должен прочитать эти местоположения и перенаправить их веб-клиентам. Я собираюсь использовать Django каналы для реализации websochet. Я установил RabbitMQ как Django Channels Channel_layer. Мой вопрос заключается в том, как читать данные из RabbitMQ (basic_consume) и отправлять их веб-клиенту с помощью websocket.

В методе websocket co nnet, который я вызываю для метода потребления, чтобы начать потребление из rabbitMQ:

async def connect(self):
    await self.accept()
    await self.channel_layer.group_add("gossip", self.channel_name)
    obj_rabbit_mq = RabbitMQueue()
    obj_rabbit_mq.consume("my_channel")

и это потребительская часть. Я вижу часть тела в моих журналах, но та часть, которая group_send не работает.

class RabbitMQueue:
    def consume(self, queue):
        print("Consuming {} ...".format(queue))
        self.declare_queue(queue)

        def callback(ch, method, properties, body):
            print(" Received {}".format(body))
            channels_layer = get_channel_layer()
            print("channels_layer: {}".format(channels_layer))
            # async_to_sync(channels_layer.group_send)(

            channels_layer.group_send(
                "gossip", {
                    "type": "user.gossip",
                    "event": "New User",
                    "username": body
                }
            )
        self.channel.basic_consume(
            queue=queue, on_message_callback=callback, auto_ack=False)
        print(' [*] Waiting for messages. To exit press CTRL+C')
        self.channel.start_consuming()
...