RabbitMQ依赖erlang,所以先安装erlang,然后再安装RabbitMQ;


先安装erlang,双击erlang的安装文件即可,然后配置环境变量:
ERLANG_HOME=D:\Program Files\erl7.1
追加到path=%ERLANG_HOME%\bin;


验证erlang是否安装成功, 打开cmd命令窗口,进入erlang的bin路径,输入erl命令,如果出现如下提示,则说明erlang安装成功:


D:\Program Files\erl7.1\bin>erl


Eshell V7.1 (abort with ^G)


再安装RabbitMQ,双击安装文件即可,安装完毕后, 设置环境变量:
RABBITMQ_SERVER=D:\Program Files\RabbitMQ Server\rabbitmq_server-3.5.6
追加到path=%RABBITMQ_SERVER%\sbin;


验证RabbitMQ是否安装成功,在CMD命令窗口输入:


C:\Windows\system32>rabbitmq-service

安装好后,我们进入rabbitMQ安装目录下的sbin目录,在目录下shift+右键打开命令行   【必须要进行这一步,不然中途会发现使用不了,连接不上.使用版本rabbitmq-server-3.7.9.】

使用rabbitmq-plugins.bat enable rabbitmq_management开启网页管理界面,然后重启rabbitMQ

远程连接需要 添加用户,可在网页admin页面添加,,添加之后一定要给权限,不给权限的话还是不行,,详细见【客户端-开始任务完成】

#添加用户

#rabbitmqctl add_vhost vh
#rabbitmqctl add_user test test
#rabbitmqctl set_user_tags test management
#rabbitmqctl set_permissions -p vh test ".*" ".*" ".*"

def start(self):
disconnected = True
while disconnected:
try:
disconnected = False
self.channel.start_consuming() # blocking call
except pika.exceptions.ConnectionClosed: # when connection is lost, e.g. rabbitmq not running
logging.error("Lost connection to rabbitmq service on manager")
disconnected = True
time.sleep(10) # reconnect timer
logging.info("Trying to reconnect...")
self.connect()
self.clear_message_queue() #could this make problems if the manager replies too fast? # 参照文档 https://blog.csdn.net/csdn_am/article/details/79894662

---报错处理【长时间未调用断开处理】---这里使用的是死循环处理,


RabbitMQ是一个在AMQP基础上完整的,可复用的企业消息系统。他遵循Mozilla Public License开源协议。
1:安装RabbitMQ需要先安装Erlang语言开发包。下载地址 http://www.erlang.org/download.html 在win7下安装Erlang最好默认安装。
设置环境变量ERLANG_HOME= C:\Program Files\erlx.x.x
添加到PATH %ERLANG_HOME%\bin; 2:安装RabbitMQ 下载地址 http://www.rabbitmq.com/download.html 安装教程:http://www.rabbitmq.com/install-windows.html
设置环境变量RABBITMQ_SERVER=C:\Program Files\rabbitmq_server-x.x.x。
添加到PATH %RABBITMQ_SERVER%\sbin;
找到环境变量中的path变量:
双击path,在其后面增加:;%RABBITMQ_SERVER%\sbin (注意前面的分号),然后确定即可
现在打开windows命令行(“cmd”),输入rabbitmq-service如果出现如下所示提示,即表示环境变量配置成功。 3:进入%RABBITMQ_SERVER%\sbin 目录以管理员身份运行 rabbitmq-plugins.bat
rabbitmq-plugins.bat enable rabbitmq_management
安装完成之后以管理员身份启动 rabbitmq-service.bat
rabbitmq-service.bat stop
rabbitmq-service.bat install
rabbitmq-service.bat start 4:浏览器访问localhost:55672 默认账号:guest 密码:guest 5. Rabbit还自带监控功能.
cmd进到sbin目录,键入rabbitmq-plugins enable rabbitmq_management启用监控管理,然后重启Rabbitmq服务器。 打开网址http://localhost:55672,用户名和密码都是guest。 6. 现在打开浏览器,输入:http://localhost:15672/ ,如果出现以下页面,则表示服务器配置成功。
默认用户名为guest,密码:guest 如果没有出现以上页面,尝试在windows命令行中输入(以管理员方式运行):
rabbitmq-plugins enable rabbitmq_management
然后运行下面的命令来安装:
rabbitmq-service stop
rabbitmq-service install
rabbitmq-service start


rabbitMQ 生产者工作模式
import pika
1 创建socket
connection = pika.BlockingConnextion(pika.ConnectionParameters('localhost'))
2 声明一个管道
channel = connection.channel()
3 声明queue
channel.queue_declare(queue='hello',durable=True)
durable:声明是持久化的队列,默认是队列存在内在中的,服务崩了之后,是不会恢复的 4 发消息
channel.basic_publish(exchange='',
routing_key='hello', # 队列的名字
body='hello word!' #消息内容
properties=pika.BasicProperties(delivery_mode=2,))
properties #消息持久化,主要语句 delivery_mode
5 发送完毕,关闭队列
connection.close() 消费者工作模式
1 创建socket
connection = pika.BlockingConnextion(pika.ConnectionParameters('localhost'))
2 声明一个管道
channel = connection.channel()
3 声明queue
channel.queue_declare(queue='hello') 4 消费消息
def callback(ch,method,properties,body):
print(' x Received %r'%body)
# ch 就是管道的内存对象地址
# method 就是包含发送信息的列表,
# properties # 消息处理完,需要手动跟服务端确认
# ch.basic_ack(delivery_tag=method.delivery_tag)
#加上下面这个相当于负载匀衡的权重值,处理慢的加上这个
channel.basic_qos(prefetch_count=1) channel.basic_consume(callback, #如果收到消息调用处理,回调函数
queue='hello',#队列的名字 
no_ack=True #消息处理完了,表示不确认,一般不加,处理完了,由客户端来向服务端确认(a_1.basic_ack(delivery_tag=a_2.delivery_tag)
)  ) 5 启动就一直运行,没有消息就阻塞 channel.start_consuming() exchange: 转发器 fanout: 所有bind到此exchange的queue都可以接收消息 direct:通过routingkey和exchange决定的那个唯一的qu eue可以接收消息 topic:所有符合routingKey(此时可以是一个表达式)的r outingKey所bind的queue可以接收消息 headers:通过headers来决定把消息发给哪些queue
import pika
conn = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channll = conn.channel()
channll.queue_declare('url',durable=True)
for i in range(1,10):
channll.publish(exchange='',
routing_key='url',
body='https://wh.lianjia.com/ershoufang/pg%s/'%i)
conn.close()

--lianjia_ser----服务端-生成10页__链家

# python 3.7
import pika
import re
import requests,pymysql
credential_s = pika.PlainCredentials('root','liu')
conn = pika.BlockingConnection(pika.ConnectionParameters(host='176.215.44.242',credentials=credential_s))
channel = conn.channel()
channel.queue_declare('url',durable=True) class Lianjia(object):
def __init__(self,static_url=''):
self.headers = {'Host':'wh.lianjia.com',
'Referer': 'https://wh.lianjia.com/ershoufang/',
'Upgrade-Insecure-Requests': '',
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36'}
if not static_url:
self.static_url='https://wh.lianjia.com/ershoufang/pg%s/'
else:
self.static_url = static_url
self.patten='data-sl="">.*?data-sl="">(.*?)</a>.*?data-log_index=".*?" data-el=".*?">(.*?)</a>(.*?)</div>.*?</span>.*?<a href=".*?" target="_blank">(.*?)</a></div>.*?<.*?</span>.*?<span>(.*?)</span>'
self.conn = pymysql.connect(host='176.215.44.242', user='root', password="liu",
database='test', port=3306, charset='utf8')
self.cur = self.conn.cursor() def get_page(self):
res = requests.get(url=self.static_url,headers=self.headers,proxies={'http':'http://58.53.128.83:3128'})
if res.status_code==200:
self.write_res(res.text) def write_res(self,text):
for i in re.findall(self.patten,text):
a_1 = i[0] # 标题
a_2 = i[1] # 小区名
a_3 = i[2] # 详情
a_4 = i[3] # 位置
a_5 =i[4] #价格
sql = 'insert into lianjia(b_t,x_q_1,x_q_2,w_z,j_g) values(%s,%s,%s,%s,%s)'
self.cur.execute(sql, [a_1, a_2, a_3, a_4, a_5])
self.conn.commit() def callback(a_1,a_2,a_3,body):
print('接收到body',body)
l = Lianjia(static_url=body)
l.get_page()
a_1.basic_ack(delivery_tag=a_2.delivery_tag)
print(body,'完成,') channel.basic_consume(callback,
queue='url'
)
channel.start_consuming()

--lianjia_cli----客户端-开始任务完成就开始下一条

 
fanout:广播模式(其他地方一样)
生产者需要更改的地方:
1 channel.exchange_declare(exchange='logs',
type='fanout')
#定义转发器的名字,在消费端上需要bind 2 channel.basic_publish(exchange='logs',
routing_key='',
body='消息随便来')
消费者需要更改的地方:
1 channel.exchange_declare(exchange='logs',
type='fanout')
2 result = channel.queue_declare(exclusive=True)#排他,唯一的,不指定queue名字,rabbit会随机分配一个名字,exclusive=True会在使用此queue的消费者断开后,自动将queue删除
3 queue_name = result.method.queue#然后使用queue_name来进行操作,然后需要绑定转发器
4 channel.queue_bind(exchange='logs',
queue=queue_name)#绑定 direct :
生产者:
1 channel.exchange_declare(exchange='direct_logs',
type='direct')
2 severity = 'info'|'warning'|'error' #级别
3 channel.basic_publish(exchange='logs',
routing_key=severity,
body='消息随便来')
消费者:
1 severitys = ['info','warning','error']
2 result = channel.queue_declare(exclusive=True)
3 queue_name = result.method.queue
4 for severity in severitys:
channel.queue_bind(exchange='direct_logs',queue=queue_name,routing_key=severity)#循环列表去绑定
topic: '#'是所有都收
生产者:
跟direct基本一样,
1 channel.exchange_declare(exchange='direct_logs',
type='topic')
消费者:
跟direct基本一样,
1 需要更改exchange='topic'

先暂时写到这里吧,下次更新其他模式

rabbit MQ 的环境及命令使用(一)的更多相关文章

  1. Rabbit MQ 学习 (一)Window安装Erlang环境

    之前也没有用过Rabbit MQ ,最近正在学习中,记性不好,特意记一下. 百度一下 先得 安装 Erlang 并且 设置环境变量. 在Erlang 官网去下载,那个慢呀... 还好CSDN 里有人提 ...

  2. windows下的php rabbit mq安装、配置

    http://www.cnblogs.com/shanyou/p/4067250.html 这篇博文写的rabbit mq和erlang的安装以及rabbitmq可视化插件的一些操作 接下去开始安装P ...

  3. celery rabbit mq 详解

    Celery介绍和基本使用 Celery 是一个 基于python开发的分布式异步消息任务队列,通过它可以轻松的实现任务的异步处理, 如果你的业务场景中需要用到异步任务,就可以考虑使用celery, ...

  4. Spring boot集成Rabbit MQ使用初体验

    Spring boot集成Rabbit MQ使用初体验 1.rabbit mq基本特性 首先介绍一下rabbitMQ的几个特性 Asynchronous Messaging Supports mult ...

  5. 在 Windows 上安装Rabbit MQ 指南

    rabbitMQ是一个在AMQP协议标准基础上完整的,可服用的企业消息系统.他遵循Mozilla Public License开源协议.采用 Erlang 实现的工业级的消息队列(MQ)服务器. Ra ...

  6. (转)在 Windows 上安装Rabbit MQ 指南

    rabbitMQ是一个在AMQP协议标准基础上完整的,可服用的企业消息系统.他遵循Mozilla Public License开源协议.采用 Erlang 实现的工业级的消息队列(MQ)服务器. Ra ...

  7. celery+Rabbit MQ实战记录

    基于以前的一篇文章,celery+Rabbit MQ的安装和使用, 本文更加详细的介绍如何安装和使用celey, Rabbit MQ. 并记录在使用celery时遇到的一些问题. 1.安装 Rabbi ...

  8. Rabbit MQ 入门指南

    rabbitMQ是一个在AMQP协议标准基础上完整的,可服用的企业消息系统.他遵循Mozilla Public License开源协议.采用 Erlang 实现的工业级的消息队列(MQ)服务器. Ra ...

  9. Rabbit MQ config文件解析

    Rabbit MQ config文件解析 tcp_listeners:用于监听AMQP连接的端口或主机名/对(不带TLS),默认端口:5672 2.numtcpacceptors :将接受TCP侦听器 ...

随机推荐

  1. Jsoup-简单爬取知乎推荐页面(附:get_agent())

    总览 今天我们就来小用一下Jsoup,从一个整体的角度来看一看爬虫 一个基本的爬虫框架包括: [x] 解析网页 [x] 失败重试 [x] 抓取内容保存至本地 [x] 多线程抓取 *** 分模块讲解 将 ...

  2. mysql使用truncate截断带有外键的表时报错--解决方案

    报错内容如:1701 - Cannot truncate a table referenced in a foreign key constraint 一.为什么要使用truncate 使用trunc ...

  3. DTCMS,添加文章时,内容中第一张图片作缩略图,并且等比例缩放图片

    DTCMS,添加文章时,内容中第一张图片作缩略图 admin/article/article_edit.aspx.cs 导入: using System.Drawing;using System.Dr ...

  4. iOS-浅谈iOS中三种生成随机数方法

    ios 有如下三种随机数方法:

  5. 利用 AWS 无服务架构之语音合成

    目录 一.架构图 二.服务部署 2.1.创建 DynamoDB 表 2.2.创建 S3 2.2.1 静态网页存储桶 2.2.2.音频存储桶 2.3.创建 SNS Topic 2.4.为 Lambda ...

  6. conda换源

    装完Anaconda后,建议更新所有的包,因为以后使用很可能会报错. 而更新的时候conda的官方源在美国,不换源就非常蓝瘦,有生之年够呛了. 换源: conda config --add chann ...

  7. Flutter TextField 文本输入框的基本属性及详解

    TextField 文本输入框 源码分析: const TextField({ Key key, this.controller, // 控制正在编辑文本 this.focusNode, // 获取键 ...

  8. 最新 第一视频java校招面经 (含整理过的面试题大全)

    从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火.京东.去哪儿.第一视频等10家互联网公司的校招Offer,因为某些自身原因最终选择了第一视频.6.7月主要是做系统复习.项目复盘.Leet ...

  9. 扩展方法和Enumerable

    .NET中扩展方法和Enumerable(System.Linq) LINQ是我最喜欢的功能之一,程序中到处是data.Where(x=x>5).Select(x)等等的代码,她使代码看起来更好 ...

  10. eclipse设置html js css自动提示

    eclipse也可以像Visual Studio 2008那样完全智能提示HTML/JS/CSS代码,使用eclipse自带的插件,无需另外安装插件,具体步骤如下 1.打开eclipse→Window ...