zoukankan      html  css  js  c++  java
  • rabbitmq使用

    远程访问其他服务器的rabbitmq

    1.先添加用户并分配角色

    rabbitmqctl add_user lisi lisi123  // 设置用户名和密码
    rabbitmqctl set_user_tags name administrator

    2.用户授权

    rabbitmqctl set_permissions -p / lisi ".*" ".*" ".*"

    不然会引发异常:pika.exceptions.ProbaleAccessDeniedError

     

    rabbitmq相关命令

    rabbitmqctl add_user username password:添加用户
    
    rabbitmqctl delete_user username:删除用户
    
    rabbitmqctl list_users:列出所有用户
    
    rabbitmqctl list_user_permissions username:列出用户权限
    
    rabbitmqctl set_permissions -p vhostpath username ".*" ".*" ".*":设置用户权限

    rabbitmqctl clear_permissions -p vhostpath username:清除用户权限

    rabbitmqctl change_password username newpassword:修改密码
    rabbitmqctl add_vhost vhostpath:创建虚拟主机
    
    rabbitmqctl delete_vhost vhostpath:删除虚拟主机
    
    rabbitmqctl list_vhosts:列出所有虚拟主机
    
    rabbitmqctl list_permissions -p vhostpath:列出虚拟主机上的所有权限 
    rabbitmqctl status:节点状态
    rabbitmqctl -p vhostpath purge_queue blue:清除队列里的消息

    典型应用场景

    1.异步处理

    场景说明:用户注册后,需要发注册邮件和注册短信,传统的方法有两种 串行和并行

    • 串行方式:将注册信息写入数据库后,发送注册邮件,再发送注册短信,以上三个任务全部完成后才返回给客户端。这有一个问题是:邮件,短信不是必须的,只是一个通知,这会让客户端等待没有必要等待的东西。

    • 并行方式:将注册信息写入数据库后 ,在发送邮件的同时发送短信,以上三个任务完成后,返回给客户端,并行的方式能缩短处理的时间。

    • 消息队列:假设三个业务节点分别使用50ms,则串行方式使用150ms,并行使用100ms。虽然并行已经缩短了处理的时间,但是前面说过,邮件和短信对我正常使用网站没有任何影响,客户端不必要等待其发送完成才显示注册成功,应该是写入数据库后就返回。引入消息队列后,把不是必须的业务逻辑异步处理。

    由此可以看出,引入消息队列后,用户的响应时间就等于写入数据库的时间 + 写入消息队列的时间(可忽略)。

    这里应该使用mq的广播模型,可以被多个消费者订阅,不同消费者实现各自的业务。

     

    2.应用解耦

    场景: 双11是购物狂欢节,用户下单后,订单系统需要通知库存系统,传统的做法就是订单系统调用库存系统的接口。

    这种做法有个缺点:

    当库存系统出现故障时,订单就会失败。订单系统和库存系统高耦合。

    引入消息队列:

    • 订单系统:用户下单后,订单系统完成持久化处理,再将消息写入消息队列,返回用户下单成功。

    • 库存系统:订阅下单的消息,进行库操作,就算库存系统出现故障,消息队列也能保证消息的可靠投递,不会导致消息丢失。

     

    3.流量削峰

    场景:秒杀活动,一般会因为瞬间流量过大,导致应用挂掉,为了解决该问题,一般在业务模块前加入消息队列。

    作用:

    • 1.可以控制秒杀活动人数,超过此一定阈值的订单直接丢弃

    • 2.可以缓解短时间的高流量压垮应用(应用能按自己最大处理能力获取订单处理)

    过程:

    1.用户的请求服务器收到之后,首先写入消息队列,加入消息队列的消息长度超过最大值,则直接抛弃用户请求或者跳转到错误页面。

    2.秒杀业务根据消息队列中的请求信息,再做后续逻辑处理

     

     

     

  • 相关阅读:
    网络安装Centos的方法
    命令源码文件——Golang
    mosquitto: error while loading shared libraries: libwebsockets.so.12: cannot open shared object file
    centos7安装mysql初始化报错
    MQTT --- 操作行为
    MQTTv5.0 ---AUTH – 认证交换
    MQTT v5.0------SUBSCRIBE 报文
    MQTT --- Retained Message
    inux centos7下源码 tar安装5.7.26详解
    20. 有效的括号
  • 原文地址:https://www.cnblogs.com/Deaseyy/p/13547849.html
Copyright © 2011-2022 走看看