• 关于RabbitMQ


    一.RabbitMQ简介

    开发语言:Erlang – 面向并发的编程语言。

    1、AMQP:

    AMQP是消息队列的一个协议。

    2、MQ的其他产品:

    3、安装文档

    二.搭建RabbitMQ环境

    版本:推荐使用3.4.1版本。

    1、安装

    注意事项:

    (1)推荐使用默认的安装路径;

    (2)系统用户名必须是英文;

    (3)计算机名必须是英文:

    (4)系统的用户必须是管理员

    如果安装失败的同学应该如何解决:

    1.重装系统  --  不推荐

    (5)将RabbitMQ安装到linux虚拟机中:推荐

    (6)使用别人安装好的RabbitMQ服务

    a) 只要给你开通一个账户即可。

    b) 使用公用的RabbitMQ服务,在192.168.0.47。

    c)  推荐。

    错误:

    2、安装完成后操作

    系统服务中有RabbitMQ服务,停止、启动、重启。

     打开命令行工具:

     如果找不到命令行工具:

     启用管理插件:

     查看管理页面:

    通过默认账户 guest/guest 登录。如果能够登录,说明安装成功。

    添加taotao用户:

    管理界面中的功能:

     

    三.5种队列

    1、简单队列

    图示:

    P:消息的生产者

    C:消息的消费者

    红色:队列

    生产者将消息发送到队列,消费者从队列中获取消息。

    管理工具中查看消息

    点击上面的队列名称,查询具体的队列中的信息:

    消费者从队列中获取消息。

    2、Work模式

    图示:

    一个生产者、2个消费者。

    一个消息只能被一个消费者获取。

    生产者:

    向队列中发送50条消息。

    测试:

    测试结果:

    1.消费者1和消费者2获取到的消息内容是不同的,同一个消息只能被一个消费者获取。

    2.消费者1和消费者2获取到的消息的数量是相同的,一个是奇数一个是偶数。

    其实,这样是不合理的,应该是消费者1要比消费者2获取到的消息多才对。

    Work模式的“能者多劳”

    测试:

    消费者1比消费者2获取的消息更多。

    消息的确认模式

    消费者从队列中获取消息,服务端如何知道消息已经被消费呢?

    模式1:自动确认

    只要消息从队列中获取,无论消费者获取到消息后是否成功消息,都认为是消息已经成功消费。

    模式2:手动确认

    消费者从队列中获取消息后,服务器会将该消息标记为不可用状态,等待消费者的反馈,如果消费者一直没有反馈,那么该消息将一直处于不可用状态。

    手动模式:

    自动模式:

    3、订阅模式

    图示:

    解读:

    (1)1个生产者,多个消费者;

    (2)每一个消费者都有自己的一个队列;

    (3)生产者没有将消息直接发送到队列,而是发送到了交换机;

    (4)每个队列都要绑定到交换机;

    (5)生产者发送的消息,经过交换机,到达队列,实现,一个消息被多个消费者获取的目的;

     

    消息的生产者

    注意:消息发送到没有队列绑定的交换机时,消息将丢失,因为,交换机没有存储消息的能力,消息只能存在在队列中。

    消费者1

    消费者2

    测试

    测试结果:

    同一个消息被多个消费者获取。

    在管理工具中查看队列和交换机的绑定关系:

    使用订阅模式能否实现商品数据的同步?

    答案:可以的。

    后台系统就是消息的生产者。

    前台系统和搜索系统是消息的消费者。

    后台系统将消息发送到交换机中,前台系统和搜索系统都创建自己的队列,然后将队列绑定到交换机,即可实现。

    消息,新增商品、修改商品、删除商品。

    前台系统:修改商品、删除商品。

    搜索系统:新增商品、修改商品、删除商品。

    所以使用订阅模式实现商品数据的同步并不合理。

    4、路由模式

    图示:

    生产者

    5、通配符模式

     

     

    图示:

    生产者。

    四.持久化交换机和队列

    持久化:将交换机或队列的数据保存到磁盘,服务器宕机或重启之后依然存在。

    非持久化:将交换机或队列的数据保存到内存,服务器宕机或重启之后将不存在。

    非持久化的性能高于持久化。

    如何选择持久化?非持久化?  --  看需求。

    1、队列和交换机的绑定关系

    实现:

    1.在配置文件中将队列和交换机完成绑定

    2.可以在管理界面中完成绑定

    a) 绑定关系如果发生变化,需要修改配置文件,并且服务需要重启

    b) 管理更加灵活

    c) 更容易对绑定关系的权限管理,流程管理

    2、消息内容

    方案:

    1.将Item对象做json序列化发送

    a) 数据大

    b) 有些数据其他人是可能用不到的

    2.发送商品的id、操作类型

    3、在界面管理工具中完成绑定关系

    4、在管理工具中绑定队列和交换机

  • 相关阅读:
    iOS 音频视频图像合成那点事
    Android低功耗蓝牙(BLE)使用详解
    android实现超酷的腾讯视频首页和垂直水平网格瀑布流一揽子效果
    基于vue单页应用的例子
    Android 6.0 超级简单的权限申请 (Permission)
    ubuntu创建Centos7镜像&&配置运行环境
    Scikit-learn方法使用总结
    解决TensorFlow最新代码编译错误问题
    jQuery 基础
    数据交换格式 —— JSON(JavaScript Object Notation)
  • 原文地址:https://www.cnblogs.com/ZJOE80/p/12803011.html
Copyright © 2020-2023  润新知