RabbitMQ整合(附带Linux安装)

MQ消息中间件整合

简单认识MQ消息中间件

这种情况会产生数据库大量IO请求对数据库很不友好

RabbitMQ整合(附带Linux安装)_第1张图片

但是使用了消息中间件后 就可以先生成订单 然后商品的详细信息 交由MQ来慢慢的添加到订单信息表中

RabbitMQ整合(附带Linux安装)_第2张图片

MQ的优势 以及 为什么要使用MQ

  1. 应用程序的解耦

MQ相当是一个中介 生产方通过MQ与消费者交互并将应用程序解耦

  1. 任务异步处理

将不需要同步操作的或者是操作时间较长的操作 交由消息队列通知消息接收方进行异步处理 提高了应用程序的响应时间

3、消峰填谷

如订单系统,在下单的时候就会往数据库写数据。但是数据库只能支撑每秒1000左右的并发写入,并发量再高就容易宕机。低峰期的时候并发也就100多个,但是在高峰期时候,并发量会突然激增到5000以上,这个时候数据库肯定卡死了。

消息被MQ保存起来了,然后系统就可以按照自己的消费能力来消费,比如每秒100个数据, 这样慢慢写入数据库,这样就不会卡死数据库了。

目前市面上的MQ产品有

RabbitMQ整合(附带Linux安装)_第3张图片

MQ是基于Erlang语言开发的基于底层语言 所有消息的延迟速度能控制住微秒级 单机每秒吞吐量也是万级别的 相对性能较好 并且社区活跃度高

消息可靠投递思路

在配置类中开启

publisher-returns: true # 发布方return回调确认开启

靠若类特

publisher-confirm-type: correlated # 开启是否达到交换机的回调(相关联的)

这两个回调 并配置RabbitConfig中ConfirmCallback回调和ReturnCallback

回调

并在发送前 将消息和消息属性 持久化到数据库并给予状态-1后

定时任务 劫取判断ack状态是否发送到交换机如果发送到交换机的话 将数据库中-1的状态改为1 如果没有发送到交换机的话 通过定时任务反复发送每次发送都在数据库中的次数+1如果超过固定次数没有发送成功 则添加该异常数据到数据库并给予状态为4 提供给后期检测

RabbitMQ

1、RabbitMQ的特点

  1. 使用简单,功能强大

  1. 基于AMQP协议,实现了跨语言 c node.js mq java python

  1. 社区活跃度高文档完整

  1. 高并发性能好,主要得益于底层基于Erlang语言 C底层语言 性能好java易开发

  1. SpringBoot默认集成RabbitMQ

  1. 工作模式

RabbitMQ整合(附带Linux安装)_第4张图片

3、RabbitMQ工作原理

RabbitMQ整合(附带Linux安装)_第5张图片

理解:

生产者发出请求时 通过Connection携带Message到交换机 交换机根据自定义的交换规则 把长链接发来的Message消息去分发或发送给一个或者多个队列并且消费者也通过长链接去实时监听一个QUEUE 一个消费者只能监听一个QUEUE但是一个QUEUE可以被多个消费者同时监听

消息可靠投递性详解

在使用RabbitMQ时 作为消息发送方希望杜绝出现任何消息丢失的场景 所以MQ为我们提供了两种可靠性投递模式

RabbitMQ的整个投递顺序为

producer ---> rabbitmqbroker ---> exchange ---> queue ---> consumer

RabbitMQ整合(附带Linux安装)_第6张图片

  1. confirm 确认模式

RabbitMQ整合(附带Linux安装)_第7张图片

2、return 退回模式

RabbitMQ整合(附带Linux安装)_第8张图片

RabbitMQ事务

RabbitMQ也提供了事务 但是性能较差

使用channel列方法,完成事务控制:

txSelect(),用于将当前channel设置成transaction模式

txCommit(),用于提交事务

txRollback().用于回滚事务

RabbitMQ工作原理及实例

实例1 简单模式

实现“生产者” 产生数据 并发送给一个队列 “消费者”监控这个队列 有信息就消费

生产者 在生产完成信息后需要根据关闭顺序 对连接进行一个顺序断连

RabbitMQ整合(附带Linux安装)_第9张图片

消费者 需要实时监控队列 所以不能断连 需要一直开启

考虑到 如果先开启消费者的话 队列中无数据可能会报错 所以在消费者中可以创建一个

RabbitMQ整合(附带Linux安装)_第10张图片

在此启动生产者产生信息到队列时 消费者就可以实时接收并消费信息

RabbitMQ整合(附带Linux安装)_第11张图片

实例2 分发工作模式

循环发送10条信息

RabbitMQ整合(附带Linux安装)_第12张图片

消费者

RabbitMQ整合(附带Linux安装)_第13张图片

因为消费者默认只能启动一次

可以通过设置更改(勾选后可以多次启动 监听同一队列)

RabbitMQ整合(附带Linux安装)_第14张图片

实现效果 发送成功后 两个消费者公平分配任务

实例3 扇形交换机模式

创建两个队列 并且创建一个交换机 交换机创建后需要绑定 队列

发送的时候只需要发送交换机和badingKey就行了 我这里的key是””

RabbitMQ整合(附带Linux安装)_第15张图片

可以创建两个消费者先创建队列 并且绑定交换机 去监听交换机绑定的两个不同的队列

RabbitMQ整合(附带Linux安装)_第16张图片

发送成功后效果为

RabbitMQ整合(附带Linux安装)_第17张图片

实例4 BadingKey模式

创建不同的线程 和不同的RoutingKey 如图 创建后绑定交换机

RabbitMQ整合(附带Linux安装)_第18张图片

消费者消费时 根据RoutingKey和BadingKey判断是否相同 而获取信息并消费

RabbitMQ整合(附带Linux安装)_第19张图片

实例5 Topics通配符模式

通配符模式认识

Routingkey一般都是有一个或多个单词组成,多个单词之间以”.”分割

例如: item. insert

通配符规则:

#:匹配一个或多个词

*:匹配不多不少恰好1个词

RabbitMQ整合(附带Linux安装)_第20张图片

实例

发送时给队列定义KEY值 可以使用通配符表示

RabbitMQ整合(附带Linux安装)_第21张图片

消费者 监听队列 给与绑定的带有通配符的key

RabbitMQ整合(附带Linux安装)_第22张图片

官网可以查看绑定情况

RabbitMQ整合(附带Linux安装)_第23张图片

Topic通配符模式总结

Topic主题模式可以实现Publish/Subscribe发布与订阅模式和Rout ing路由模式的功能;只是Topic在配置routing key的时候可以使用通配符,显得更加灵活。

Linux安装MQ

CentOS7安装RabbitMQ简单实用教程

首先安装RabbitMQ需要JDK环境,如果虚拟机没有JDK1.8小伙伴们自行去搜一篇教程,很快的,然后我们就进入今天的正题,

因为RabbitMQ是基于Erlang语言编写的这么一个消息中间件,我们需要先安装Erlang

1安装Erlang

1.1安装前线完成条件

curl -s https://packagecloud.io/install/repositories/rabbitmq/erlang/script.rpm.sh | sudo bash

1.2第二步安装Erlang

yum install -y erlang

1.3我们检查一下是否安装成功

erl 这样就安装完Erlang了

2.安装完Erlang以后我们就可以进行MQ的安装了

2.1和之前一样,我们需要先完成配置的条件,这里我们需要导入一些依赖

rpm --import https://packagecloud.io/rabbitmq/rabbitmq-server/gpgkey
rpm --import https://packagecloud.io/gpg.key
curl -s https://packagecloud.io/install/repositories/rabbitmq/rabbitmq-server/script.rpm.sh | sudo bash

分别运行这三条语句,如果都没有报错,那救成功了

2.2接下来我们要去下载RabbitMQ的安装包

下载的时候记住选择el7的版本,el7对应centOS7,

因为我这里下载网速会很慢,所有我选择直接在虚拟机里用wget下载,如果虚拟机没有安装wget的小伙伴也要下载wget哦,或者不嫌网速慢的话就直接在官网下载吧

wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.8.5/rabbitmq-server-3.8.5-1.el7.noarch.rpm

2.3下载完成后我们还需要一些配置

rpm --import https://www.rabbitmq.com/rabbitmq-release-signing-key.asc
yum -y install epel-release
yum -y install socat

2.4安装我们的MQ包

rpm -ivh rabbitmq-server-3.8.5-1.el7.noarch.rpm

2.5启用管理平台插件,,可以可视化管理RabbitMQ。

rabbitmq-plugins enable rabbitmq_management

3.最后我们启动MQ来测试一下

3.1启动命令

systemctl start rabbitmq-server

我们查看一下MQ的状态

systemctl status rabbitmq-server

这样RabbitMQ就启动成功了

3.2访问地址http://192.168.128.100:15672

192.168.128.100是你的虚拟机的IP地址,可以用ip addr命令来查看

同时要保证5672和15672端口是打开的,这里可以通过这些命令来查看

#查看防火墙状态
service firewalld status
#关闭防火墙
service firewalld stop
#开启防火墙
service firewalld start
#查看防火墙端口列表
firewalld-cmd --list-all

第一次安装RabbitMQ默认的账号密码都是guest,但是使用guest登录会报错

原因是RabbitMQ3.3以后,guest账号只能在本机登录

我们可以创建一个用户

1.这里创建一个用户名和密码都是admin的用户

rabbitmqctl add_user admin admin

2.设置admin为超级管理员

rabbitmqctl set_user_tags admin administrator

3.授权远程访问

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

4.重启RabbitMQ

systemctl restart rabbitmq-server
RabbitMQ整合(附带Linux安装)_第24张图片

最后我们来登录一下

RabbitMQ整合(附带Linux安装)_第25张图片

你可能感兴趣的:(rabbitmq,linux)