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.秒杀业务根据消息队列中的请求信息,再做后续逻辑处理

 

 

 

原文地址:https://www.cnblogs.com/Deaseyy/p/13547849.html