RabbitMQ 实现实现基本通信及订单处理

------------恢复内容开始------------

  一.基本使用 》》》 依据官方文档

  (1)生产端

 

 

# python 操作我们rabbitMq 需要的模块 pika
# pip install pika
import pika

# 建立和RabbitMQ的链接
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))

# 通过句柄
channel = connection.channel()

# 声明消息队列
channel.queue_declare(queue = 'hello')

# body 一个内容体 往队列中进行发消息
channel.basic_publish(exchange='',
                      routing_key='hello',
                      body='Hello World!')

print("[x]发送'Hello World!'")

# 关闭
connection.close()

  (2)消费端

# 取消息
import pika
# 建立和RabbitMQ的链接
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))


# 通过句柄
channel = connection.channel()

# 确认我们的queue的是存在的
channel.queue_declare(queue='hello')


# 申明回调函数
def callback(ch, method, properties, body):
    print(" [x] Received %r" % body)

# 从Q 中取消息
channel.basic_consume(queue='hello',
                      auto_ack=True,
                      on_message_callback=callback)

print(' [*] Waiting for messages. To exit press CTRL+C')
channel.start_consuming()  # 开始消费

  (3)执行

   窗口一 放信息

 

   窗口二  收消息

 

  二.redis的高级部分

   

  (1)linux 命令行实现安装和启动

  #下载

wget http://download.redis.io/releases/redis-5.0.7.tar.gz

 

  # 解压 

 

tar -zxvf redis-5.0.7.tar.gz

  # 建立软连接

  

ln -s redis-5.0.7 redis

  # 相关信息
  

cd redis
make&&make install
#在src目录下可以看到
#redis-server--->redis服务器
#redis-cli---》redis命令行客户端
#redis-benchmark---》redis性能测试工具
#redis-check-aof--->aof文件修复工具
#redis-check-dump---》rdb文件检查工具
#redis-sentinel---》sentinel服务器,哨兵
#redis作者对windows维护不好,window自己有安装包

  (2)三种命令行启动方式

    1.最简单的启动

    

redis-server

    相关的参数命令

ps -ef|grep redis  #查看进程
netstat -antpl|grep redis #查看端口
redis-cli -h ip -p port ping #命令查看

  2.动态参数启动

#动态参数启动
redis-server --port 6380 #启动,监听6380端口

  3.vim  redis_6379.conf进行配置文件启动

  (1)配置

daemonize no #是否以守护进程启动 一般是改为yes 开启进行守护
pidfile /var/run/redis.pid   #进程号的位置,删除
port 6379    #端口号
dir "opt/soft/redis/data"  #工作目录   》》》 事先要进行文件存放的目录
logfile “6379.log” #日志位置  

  (2)启动命令

  

# 一般启动redis服务 redis-sever redis_6379.conf 启动配置文件即可

# 因为环境没有配置的原因
./src/redis-server redis_6379.conf

  # 查看进程号

#查看进程
ps -ef |grep redis-server |grep 6379
#查看日志
cd data 
cat 6379.log

  

  ####客户端连接###

redis-cli -h 127.0.0.1 -p 6379
ping #返回PONG

`    

  (2)应用场景

### 1.4 Redis典型使用场景

缓存系统:

计数器:网站访问量,转发量,评论数

消息队列:发布订阅,阻塞队列实现

排行榜:有序集合

社交网络:很多特性跟社交网络匹配,粉丝数,关注数

实时系统:垃圾邮件处理系统,布隆过滤器

  三. 一主多从

  查询进行id

  

  ps -ef |grep redis-server

  配置:文件

  复制一份配置文件

  cp redis_6379.conf redis_6378.conf

daemonize yes
bind 0.0.0.0  # 127.0.0.1 只能连接本地 这样既可以进行外部redis连接
pidfile /var/run/redis.pid
port 6378  # 端口号
dir "/root/data"  # 数据存储文件
logfile "6378.log"  # 日志文件

     # 一主多重 切换redis 服务器

   cd redis

  ./src/redis-cli -p 6378

  (1)方式一:slave 执行主从命令

  

6378是从,6379是主

在6378上执行

slaveof 127.0.0.1 6379 #异步
slaveof no one #取消复制,不会把之前的数据清除

  ./src/redis-cli -p 6379 写数据

 # 客户端主是6379 负责写数据  从客户端6378负责读取数据

(2)文件的配置方式二:

  # 在redis 服务端文件vim 进行配置

  

slaveof ip port #配置从节点ip和端口
slave-read-only yes #从节点只读,因为可读可写,数据会乱

  配置  :从连接主

daemonize yes
bind 0.0.0.0
pidfile /var/run/redis.pid
port 6378
dir "/root/data"
logfile "6378.log"
slaveof 127.0.0.1 6379
slave-read-only yes

 (3)解决主从复制  万一主挂了的问题  》》》 利用哨兵 高可用的方法进行 解决:起一个sentinel 进行 进行监听 主服务器的情况 

  

port 26379
daemonize yes
dir /data
protected-mode no
bind 0.0.0.0
logfile "redis_sentinel.log"
sentinel monitor mymaster 10.0.0.1 6379 2
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000

  启动哨兵

  redis-sentinel sentinel.conf

 

python链接

 

import redis
from redis.sentinel import Sentinel

# 连接哨兵服务器(主机名也可以用域名)
# 10.0.0.101:26379
sentinel = Sentinel([('10.0.0.101', 26379),
                     ('10.0.0.101', 26378),
                     ('10.0.0.101', 26377)
             ],
                    socket_timeout=5)


print(sentinel)
# 获取主服务器地址
master = sentinel.discover_master('mymaster')
print(master)




# 获取从服务器地址
slave = sentinel.discover_slaves('mymaster')
print(slave)




# 获取主服务器进行写入
# master = sentinel.master_for('mymaster', socket_timeout=0.5)
# w_ret = master.set('foo', 'bar')
#
#
#
#
# slave = sentinel.slave_for('mymaster', socket_timeout=0.5)
# r_ret = slave.get('foo')
# print(r_ret)

 


  

posted @ 2019-12-26 17:22  可乐'不加冰  阅读(1620)  评论(0编辑  收藏  举报