0
我正在使用django,Django rest框架和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);
},
});
}
创建后,我可以将消息发送评论,但我的客户端没有收到任何数据,在我的Chrome控制台,我发现这个:
sub/ (pending) xhr
我该怎么做?
这实际上并不是rabbitmq的用途。 –
因此,我应该使用django-socketio或django频道吗? – Windsooon