战狂粗人张

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

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

 

posted on 2020-04-29 16:29  战狂粗人张  阅读(122)  评论(0编辑  收藏  举报