Я использую django, django rest framework и Rabbitmq. Я хочу использовать Rabbitmq для отправки уведомлений клиенту после того, как пользователь создаст комментарий (например, длинный опрос). Я следую за RabbitMQ Tutorials здесь.Отправлять уведомления с помощью Rabbitmq
Вот мой view.py создавать комментарии:
class CommentList(generics.ListCreateAPIView):
permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
queryset = Comment.objects.all()
serializer_class = CommentSerializer
def perform_create(self, serializer):
serializer.save(user=self.request.user)
def create(self, request, *args, **kwargs):
#use pika and rabbitmq to notifity user
connection = pika.BlockingConnection(pika.ConnectionParameters(
host='localhost'))
channel = connection.channel()
channel.queue_declare(queue='task_queue', durable=True)
message = 'Hello, world'
channel.basic_publish(exchange='',
routing_key='task_queue',
body=message,
properties=pika.BasicProperties(
delivery_mode = 2, # make message persistent
))
connection.close()
return super().create(request, args, kwargs)
создать вызов очереди «task_queue», и послал сообщение «Привет, мир» каждый раз, когда я создаю я комментирую.
Вот мой view.py получить сообщение:
def get_notifications(request):
connection = pika.BlockingConnection(pika.ConnectionParameters(
host='localhost'))
channel = connection.channel()
channel.queue_declare(queue='task_queue', durable=True)
def callback(ch, method, properties, body):
return HttpResponse("ok")
ch.basic_ack(delivery_tag = method.delivery_tag)
#channel.basic_qos(prefetch_count=1)
channel.basic_consume(callback,
queue='task_queue')
channel.start_consuming()
В стороне клиента, я использую функцию JQuery AJAX для запроса данных:
function poll() {
var poll_interval=0;
$.ajax({
url: "/sub", //sub calls get_notifications()
type: 'GET',
dataType: 'json',
success: function(data) {
append_circle();
poll_interval=0;
},
error: function() {
poll_interval=1000;
},
complete: function() {
setTimeout(poll, poll_interval);
},
});
}
Я могу отправить сообщение после того, как я создаю комментарий, но моя клиентская сторона не получает никаких данных, на моей консоли хром я нахожу это:
sub/ (pending) xhr
Что мне делать?
На самом деле это не тот кролик. –
Так что я должен использовать каналы django-socketio или django? – Windsooon