RabbitMQ入门

比特灵韵使
• 阅读 1529

记得在学习Celery的时候,官方文档就建议我们的broker使用RabbitMQ或Redis,可是当然由于Redis使用比较习惯,并且不用在去另外安装,因此好长时间都没有去学习这个东西.首先RabbitMQ绝对不像大众所认识的那样,是JAVA或者Python,GO写的,而是一种交换机语言ERLang,前段时间这个语言的发明人的离世也是轰动了整个IT界,而作为程序员的我因为时间问题没有学习RabbitMQ,很是后悔呀,所以现在赶紧学习学习,废话不多说,请欣赏...

这是什么东西?

  • RabbitMQ是一个消息队列的中间件,通俗点讲就是饮料生产商(康师傅,达利园等等)生产东西放入超市,然后用户去超市里拿.这里的超市就是我们的RabbitMQ,饮料生产商就是所谓的生产者,用户就是消费者,这里生产者可以好多种消息(茉莉,红茶等等)放入到队列中,消费者也可以根据名称去拿(我只能去买),这就是其功能.

点击进入安装教程
但是不要以为这样就能开始,当你运行以下代码就会发现报错:

530, "NOT_ALLOWED - access to vhost '/' refused for user 'jim'"

这是怎么回事呢?我也给大家解决了,点击查看
__生产者__:

import pika

class Produce:
    def __init__(self, host, port, credentials):
        # 创建连接参数对象
        parameters = pika.ConnectionParameters(host, port, credentials=credentials)
        # 创建连接对象
        self._conn = pika.BlockingConnection(parameters)
        # 创建一个默认channel
        self._channel = self._conn.channel()

    def create_channel(self, num):
        """ 创建channel """
        self._channel = self._conn.channel(num)

    def create_queue(self, name):
        """ 创建queue """
        self._channel.queue_declare(queue=name)
        self._key = name

    def run(self, body):
        """ 生产消息 """
        self._channel.basic_publish(exchange='', routing_key=self._key, body=body, )

        print(" [x] Sent Message Successful! ")

        self._conn.close()


if __name__ == '__main__':
    host = 'localhost'
    port = 5672
    credentials = pika.PlainCredentials('jim', 'adminjim')
    produce = Produce(host, port, credentials)
    produce.create_queue('你傻不傻')
    produce.run('你就是一个垃圾')

__消费者__:

import pika

class Custumer:
    def __init__(self, host, port, credentials):
        # 连接到rabbitmq服务器
        self.conn = pika.BlockingConnection(pika.ConnectionParameters(host, port, credentials=credentials))
        self.channel = self.conn.channel()

    def create_or_user_queue(self, name):
        # 声明消息队列,消息将在这个队列中进行传递。如果队列不存在,则创建
        self._key = name
        self.channel.queue_declare(queue=name)

    def _callback(self, ch, method, properties, body):
        """ 定义一个回调函数来处理,这边的回调函数就是将信息打印出来。 """
        print(" [x] Received %r" % (body, ))

    # 告诉rabbitmq使用callback来接收信息
    def run(self):
        self.channel.basic_consume(on_message_callback=self._callback, queue=self._key, auto_ack=True)  # no_ack=True表示在回调函数中不需要发送确认标识

        print(' [*] Waiting for messages. To exit press CTRL+C')

        self.channel.start_consuming()  # 开始接收信息,并进入阻塞状态,队列里有信息才会调用callback进行处理。

if __name__ == '__main__':
    host = 'localhost'
    port = 5672
    credentials = pika.PlainCredentials('jim', 'adminjim')
    custumer = Custumer(host, port, credentials)
    custumer.create_or_user_queue('你傻不傻')
    custumer.run()

有没有学会呢,学不会或者觉得简单的都不要着急,我会学深入了再来满足大家.
这是pika包的官方文档,点击查看

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
3年前
RabbitMQ监控(2)——RabbitMQ
本文旨在为大家打开java关于rabbitmq操作的窗户,简单应用,帮助理解官方文档,详细内容,还是要参考官方文档,这里是官方文档的中文过渡区一,基础概念:   每个rabbitmqserver叫做一个Broker,等着tcp连接进入。   在rabbitmqserver进程内有Exchange,定义了这个消
Stella981 Stella981
3年前
RabbitMQ学习:RabbitMQ的六种工作模式之简单和工作模式(三)
上一篇:RabbitMQ学习:RabbitMQ的基本概念及RabbitMQ使用场景(二)https://my.oschina.net/u/4115134/blog/3223371(https://my.oschina.net/u/4115134/blog/3223371)RabbitMQ的六种工作模式
Stella981 Stella981
3年前
RabbitMQ入门
\toc\一:入门1.安装Erlang2.安装RabbitMQ3.配置激活RabbitMQ'sManagementPluginC:\ProgramFiles\RabbitMQServer\rabbitmq_server3.6.12\sbinrabbitmqplugins.b
Stella981 Stella981
3年前
Python开发【Part 13】:RabbitMQ与Redis
本节内容1.RabbitMQ队列2.Redis缓存一、RabbitMQ队列  安装 http://www.rabbitmq.com/installstandalonemac.html安装pythonrabbitMQmodule 1234567pipi
Stella981 Stella981
3年前
Python celery简介
Celery异步分布式什么是celery?他是一个python开发的异步分布式任务调度模块celery本身不提供消息服务,使用第三方服务,也就是broker来传递任务,目前支持rabbitmq,redis,数据库等等。我们使用redis连接URL的格式为:redis://:password@hostname:port/
Stella981 Stella981
3年前
RabbitMQ Network Partitions的预警和处理策略
网络分区的意义RabbitMQ的模型类似交换机模型,且采用erlang这种电信网络方面的专用语言实现。RabbitMQ集群是不能跨LAN部署(如果要WAN部署需要采用专门的插件)的,也就是基于网络情况良好的前提下运行的。为什么RabbitMQ需要这种前提假设?这个和它本身的数据一致性复制原理有关。RabbitMQ采用的镜像队列是一种环
Stella981 Stella981
3年前
RabbitMQ安装测试学习过程简单的记录
工作快两年了php手册都没有完全的通读过一遍发现自己不知道的东西太多了一定要坚持认真的看完!!!今天接着看php手册是看到消息队列RabbitMQ比较感兴趣先练练吧1:安装 由于RabbitMQ是由Erlang语言开发的首先要安装Erlang下载Erlang(https://www.oschina.net/action/GoToLink
Wesley13 Wesley13
3年前
activeMQ入门+spring boot整合activeMQ
最近想要学习MOM(消息中间件:MessageOrientedMiddleware),就从比较基础的activeMQ学起,rabbitMQ、zeroMQ、rocketMQ、Kafka等后续再去学习。上面说activeMQ是一种消息中间件,可是为什么要使用activeMQ?在没有使用JMS的时候,很多应用会出现同步通信(客户端发起请求后需要等待服务
Stella981 Stella981
3年前
RabbitMQ 初体验
<h2概述</h2<blockquoteRabbitMQ是一款消息队列中间件。他提供了几乎覆盖所有语言的SDK与文档,简直强大的不的了。要详细的去了解学习RabbitMQ,我建议还是看官方文档吧。<ahref"http://www.rabbitmq.com/getstarted.html"rel"nofollownoreferrer"ht
Stella981 Stella981
3年前
RabbitMQ的五种工作模式的简单实现
1\.不使用Exchange交换机(默认交换机)工具类packagecom.lemon.rabbitmq.utils;importcom.rabbitmq.client.Connection;importcom.rabbitmq.client.ConnectionFactory;
为什么mysql不推荐使用雪花ID作为主键
作者:毛辰飞背景在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究
比特灵韵使
比特灵韵使
Lv1
故乡今夜思千里,霜鬓明朝又一年。
文章
3
粉丝
0
获赞
0