安装 rabbitmq ,通过生成器获取redis列表数据 与 Celery 分布式异步队列
一、安装rabbitmq
1.安装配置epel源
rpm -ivh http://dl.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
2.安装erlang
yum -y install erlang
3.安装RabbitMQ
yum -y install rabbitmq-server
4.启动服务
centos6:
service rabbitmq-server start
centos7:
systemctl start rabbitmq-server
5.启动web管理插件
rabbitmq-plugins enable rabbitmq_management
6.重启rabbitmq生效web插件
centos6:
service rabbitmq-server restart
centos7:
systemctl restart rabbitmq-server
rabbitmq 源码安装 官网地址:rabbitmq
http://www.rabbitmq.com/releases/rabbitmq-server/
官网地址:erlang
http://erlang.org/download/ 一、概念:
Broker:简单来说就是消息队列服务器实体。
Exchange:消息交换机,它指定消息按什么规则,路由到哪个队列。
Queue:消息队列载体,每个消息都会被投入到一个或多个队列。
Binding:绑定,它的作用就是把exchange和queue按照路由规则绑定起来。
Routing Key:路由关键字,exchange根据这个关键字进行消息投递。
vhost:虚拟主机,一个broker里可以开设多个vhost,用作不同用户的权限分离。
producer:消息生产者,就是投递消息的程序。
consumer:消息消费者,就是接受消息的程序。
channel:消息通道,在客户端的每个连接里,可建立多个channel,每个channel代表一个会话任务。 二、安装RabbitMQ
CentOS:
.先安装erlang
# PS: 注意安装操作首先要切换到root工作环节中
# 在命令 如果$ 表示是普通用户,
yum -y install make gcc gcc-c++ kernel-devel m4 ncurses-devel openssl-devel
yum -y install ncurses-devel
yum install ncurses-devel
wget http://erlang.org/download/otp_src_19.3.tar.gz
tar -xzvf otp_src_19..tar.gz
cd otp_src_19.
./configure --prefix=/usr/local/erlang --with-ssl --enable-threads --enable-smp-support --enable-kernel-poll --enable-hipe
make && make install
配置erlang环境
vi /etc/profile #在最后添加下文
PATH=$PATH:/usr/local/erlang/bin
使环境变量生效
source /etc/profile
测试一下是否安装成功,在控制台输入命令erl
crt+z 退出
.安装rabbitmq wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.5.8/rabbitmq-server-3.5.8.tar.gz
tar -zxvf rabbitmq-server-3.5..tar.gz
cd abbitmq-server-3.5.
make
make TARGET_DIR=/usr/local/rabbitmq SBIN_DIR=/usr/local/rabbitmq/sbin MAN_DIR=/usr/local/rabbitmq/man DOC_INSTALL_DIR=/usr/local/rabbitmq/doc install
配置erlang环境
vi /etc/profile #在最后添加下文
PATH=$PATH:/usr/local/erlang/bin:/usr/local/rabbitmq/sbin
使环境变量生效
source /etc/profile
. 启动:rabbitmq-server
rabbitmq-server start
. 检查服务启动状态
[root@node01 ~]# netstat -lnpt|grep beam
tcp 0.0.0.0: 0.0.0.0:* LISTEN /beam
tcp 0.0.0.0: 0.0.0.0:* LISTEN /beam
tcp 0.0.0.0: 0.0.0.0:* LISTEN /beam
[root@node01 ~]#
# 表示启动成功
三、管理命令
启动:rabbitmq-server start
关闭:rabbitmqctl stop
状态:rabbitmqctl status 四、插件
启动web管理插件
rabbitmq-plugins enable rabbitmq_management
如果报错
错误解决:
Error: {cannot_write_enabled_plugins_file,"/etc/rabbitmq/enabled_plugins", enoent}
mkdir /etc/rabbitmq
重新启动输入地址:localhost:,帐号默认为guest,密码guest,此帐号默认只能在本机访问。不建议打开远程访问。你可以创建一个帐户,并设置可以远程访问的角色进行访问。
如:
rabbitmqctl add_user supery # 创建用户supery rabbitmqctl set_user_tags supery administrator # 给创建的supery用户administrator角色 五、用户管理
默认的guest帐户相当于root帐户
rabbitmqctl add_user username password 添加帐户
rabbitmqctl change_password username newpassword 修改密码
rabbitmqctl delete_user username 删除帐户
rabbitmqctl list_users 列出所有帐户
rabbitmqctl set_user_tags User Tag 设置角色(administrator、monitoring、policymaker、management、其它)
立即生效,不需重启 六、创建配置文件
[root@node01 ~]# ll /etc/rabbitmq/
total
-rw-r--r-- root root Mar : enabled_plugins
-rw-r--r-- root root Mar : rabbitmq.config
[root@node01 ~]# cat /etc/rabbitmq/rabbitmq.config
[{rabbit, [{loopback_users, ["root","supery"]}]}]. 操作步骤:
vi /etc/rabbitmq/rabbitmq.config
将[{rabbit, [{loopback_users, ["root","supery"]}]}]. 复制到文件中即可 esc
:x 保存并退出 七、重启rabbitmq-server并测试访问
rabbitmqctl stop
rabbitmqctl start
浏览器访问
. 查看自己的服务器ip地址
ifconfig
# inet addr:172.24.129.3 ===> 服务器ip地址
. 浏览器访问
http://39.104.109.159:15672 ===> 输入用户密码登录即可 登录成功!完成
二、生成器获取redis 数据
操作redis 列表.
import redis
"""
redis = { k1:[,,,,]
}
""" conn = redis.Redis(host='47.94.172.250',port=,password='Luffy!4321') # 左插入
# conn.lpush('k1',)
# 右插入
# conn.rpush('k1',) # 左获取
# val = conn.lpop('k1')
# val = conn.blpop('k1',timeout=) # hang住 # 右获取
# val = conn.rpop('k1')
# val = conn.brpop('k1',timeout=) # hang住 # conn.lpush('k1',*[,,,,,,,,,,,,,])
def list_iter(key,count=):
index =
while True:
data_list = conn.lrange('k1', index, index+count-)
if not data_list:
return
index += count for item in data_list:
yield item print(conn.lrange('k1',,)) for item in list_iter('k1',count=):
print(item)
二、celery 分布式消息队列
Cerlery 是基于python 开发的一个分布式任务队列框架,支持使用任务队列的方式在分布的机器/进程/线程上执行。
图2展示的是Celery的架构,它采用典型的生产生-消费者模式,主要由三部分组成:broker(消息队列)、workers(消费者:处理任务)、backend(存储结果)。实际应用中,用户从Web前端发起一个请求,我们只需要将请求所要处理的任务丢入任务队列broker中,由空闲的worker去处理任务即可,处理的结果会暂存在后台数据库backend中。我们可以在一台机器或多台机器上同时起多个worker进程来实现分布式地并行处理任务。
1. 建立消息队列
首先,我们必须拥有一个broker消息对列用于发送和接收消息,celery官方给出了多个broker的备选方案:RabbitMQ,Redis, Database(不推荐)以及其他的消息中间件,在官方的推荐下,我们就使用RabbitMQ作为我们的消息中间件.在linux上安装的方式如下:
(安装 链接https://www.cnblogs.com/grayguo/p/5300776.html)
sudo apt-get install rabbitmq-server
命令执行成功后, rabbitmq-server就已经安装好并运行在后台了。
也可以通过命令rabbitmq-server来启动rabbitmq server,以及命令rabbitmqctl stop 命令来停止server.
Ubunt安装
方法二:使用APT来装
.添加以下地址到/etc/apt/sources.list
deb http://www.rabbitmq.com/debian/ testing main :public key $ wget http://www.rabbitmq.com/rabbitmq-signing-key-public.asc sudo apt-key add
更新包 sudo apt-get update
安装Rabbitmq-server sudo apt-get install rabbitmq-server
在rabbitmq安装的过程中,需要用到erlang,使用以上方法安装时,都可以自动安装这些必要的包 启动:sudo rabbitmq-server start
关闭: sudo rabbitmq-server stop
2. 安装django-celery
pip install celery
pip install django-celery
3. 配置settings.py
首先,在Django工程的settings.py文件中加入如下配置代码:
import djcelery
djcelery.setup_loader()
BROKER_URL= 'amqp://guest@localhost//'
CELERY_RESULT_BACKEND = 'amqp://guest@localhost//'
其中,当djcelery.setup_loader()运行时,Celery便会去查看INSTALLD_APPS下包含的所有app目录中的tasks.py文件,找到标记为task的方法,将它们注册为celery task。BROKER_URL和CELERY_RESULT_BACKEND分别指代你的Broker的代理地址以及Backend(result store)数据存储地址。在Django中如果没有设置backend,会使用其默认的后台数据库用来存储数据。注意,此处backend的设置是通过关键字CELERY_RESULT_BACKEND来配置,与一般的.py文件中实现celery的backend设置方式有所不同。一般的.py中是直接通过设置backend关键字来配置,如下所示:
app = Celery('tasks', backend='amqp://guest@localhost//', broker='amqp://guest@localhost//')
然后,在INSTALLED_APPS中加入djcelery:
INSTALLED_APPS = (
……
'qv',
'djcelery'
……
)
4. 在要使用该任务队列的app根目录下(比如qv),建立tasks.py,比如:
在tasks.py中我们就可以编码实现我们需要执行的任务逻辑,在开始处import task,然后在要执行的任务方法开头用上装饰器@task。需要注意的是,与一般的.py中实现celery不同,tasks.py必须建在各app的根目录下,且不能随意命名。
5. 生产任务
在需要执行该任务的View中,通过build_job.delay的方式来创建任务,并送入消息队列。比如:
6. 启动worker的命令
#先启动服务器
python manage.py runserver
#再启动worker
python manage.py celery worker -c 4 --loglevel=info
四、补充
Django下要查看其他celery的命令,包括参数配置、启动多worker进程的方式都可以通过python manage.py celery --help来查看:
另外,Celery提供了一个工具flower,将各个任务的执行情况、各个worker的健康状态进行监控并以可视化的方式展现,如下图所示:
Django下实现的方式如下:
1. 安装flower:
pip install flower
2. 启动flower(默认会启动一个webserver,端口为5555):
python manage.py celery flower
3. 进入http://localhost:5555即可查看。
安装 rabbitmq ,通过生成器获取redis列表数据 与 Celery 分布式异步队列的更多相关文章
- 【比特币】通过dns seeds获取节点列表数据
通过dns seeds获取节点列表数据 dns seed是什么 返回比特币网络上完整节点IP地址的DNS服务器,用于协助发现节点. 哪里可以查看到 我们在bitcoinj库中,params文件夹内为网 ...
- ajax获取动态列表数据后的分页问题
ajax获取动态列表数据后的分页问题 这是我在写前台网站时遇到的一个分页问题,由于数据是通过ajax的方式来请求得到的,如果引入相应的js文件来做分页,假如只是静态的填放数据到列表各项内容中(列表条数 ...
- 利用SSIS进行SharePoint 列表数据的ETL
好几年前写了一篇<SSIS利用Microsoft Connector for Oracle by Attunity组件进行ETL!>,IT技术真是日新月异,这种方式对于新的SQL SERV ...
- 在Centos上安装RabbitMQ流程(转)
在Centos上安装RabbitMQ流程------------------------ 1. 需求 由于项目中要用到消息队列,经过ActiveMQ与RabbitMQ的比较,最终选择了RabbbitM ...
- dedecms Ajax异步获取文章列表
dedecms如何通过ajax(异步)动态获取文章列表数据. 第一步添加:服务端(PHP)代码 打开plus目录下面的list.php文件,在12行代码下面添加以下代码: if(isset($_GET ...
- 微信小程序云开发-列表数据分页加载显示
一.准备工作 1.创建数据库nums,向数据库中导入108条数据 2.修改数据库表nums的权限 二.新建页面ListPaginated 1.wxml文件 <!-- 显示列表数据 --> ...
- diamond源码阅读-获取服务器列表
serverAddressProcessor public synchronized void start() { if (isRun) { return; } isRun = true; initH ...
- 快速入门分布式消息队列之 RabbitMQ(1)
目录 目录 前言 简介 安装 RabbitMQ 基本对象概念 Message 消息 Producer 生产者 Consumer 消费者 Queue 队列 Exchange 交换机 Binding 绑定 ...
- redis列表,字典,管道,vue安装,创建项目
redis mysql,redis,mogondb 1.mysql,oracle:关系型数据库,有表概念 2.redis,mongodb/nosql:非关系型数据库 没有表概念 mongodb存储在硬 ...
随机推荐
- actionView
类似于actionBar也是在导航栏里用但是他使用的是menu菜单设置菜单项的AsAction=“always|withText” 本例使用LoaderCallbacks<Cursor>接 ...
- maven仓库的作用以及仓库的分类
maven的工作需要从仓库下载一些jar包,如下图所示,本地的项目A.项目B等都会通过maven软件从远程仓库(可以理解为互联网上的仓库)下载jar包并存在本地仓库,本地仓库 就是本地文件夹,当第二次 ...
- mysql 执行多线程临时方案
sqr::IDatabase *db=NULL;IDbConnection *conn = NULL;int main(int argc, char* argv[]) { db = GetDataba ...
- Laravel 5.4+Vue.js 初体验:Laravel下配置运行Vue.js
生产材料PHP:PHP 5.6+Laravel 5.4:https://github.com/laravel/laravel/releases/Composer:http://getcomposer. ...
- CSV 文件
CSV 文件 CSV(Comma Separated Values 逗号分隔值) 是一种文件格式(如.txt..doc等),也可理解 .csv 文件就是一种特殊格式的纯文本文件.即是一组字符序列,字符 ...
- 专2-第二课 Eclipse开发环境搭建
2.1下载Eclipse 2.2 安装C/C++版本的Eclipse 2.3 安装JDT插件开发Java程序 2.4 使用Eclipse开发驱动程序 既然安装了eclipse来进行驱动学习,那么我们就 ...
- SharedPreferences的基本使用-----存,删,改,查
1.创建一个SharedPreferences对象 SharedPreferences spf = context.getSharedPreferences("imageload" ...
- 2018.10.14 bzoj1915: 奶牛的跳格子游戏(单调队列优化dp)
传送门 NOIP练习题. f[i]f[i]f[i]表示去的时候选了iii且回来的时候第一步走的是i−1i-1i−1的最优值. 显然f[i]=maxf[i]=maxf[i]=max{f[j]−sum[j ...
- 2018.07.12 atcoder Choosing Points(数学分析好题)
传送门 一句话题意:给出n,d1,d2" role="presentation" style="position: relative;">n,d ...
- arduino IO口
AVR单片机的每组I/O口都配备有三个8位寄存器,分别是:方向控制寄存器DDRx.数据寄存器PORTx.输入引脚寄存器PINx(x=A/B/C/D).I/O口的工作方式和表现特征由这三个I/O寄存器控 ...