• 关于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、在管理工具中绑定队列和交换机

  • 相关阅读:
    将PHP文件生成静态文件源码
    Entity Framework Code First 学习日记(6)一对多关系
    Entity Framework Code First 学习日记(5)
    Entity Framework Code First 学习日记(3)
    Entity Framework Code First 学习日记(7)多对多关系
    Entity Framework Code First学习日记(2)
    Entity Framework Code First 学习日记(8)一对一关系
    Entity Framework Code First 学习日记(9)映射继承关系
    Entity Framework Code First 学习日记(10)兼容遗留数据库
    Entity Framework Code First 学习日记(4)
  • 原文地址:https://www.cnblogs.com/ZJOE80/p/12803011.html
Copyright © 2020-2023  润新知