您现在的位置是:首页 > 正文

RabbitMQ整合(附带Linux安装)

2024-02-29 13:27:57阅读 1

MQ消息中间件整合

简单认识MQ消息中间件

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

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

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

  1. 应用程序的解耦

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

  1. 任务异步处理

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

3、消峰填谷

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

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

目前市面上的MQ产品有

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. 工作模式

3、RabbitMQ工作原理

理解:

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

消息可靠投递性详解

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

RabbitMQ的整个投递顺序为

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

  1. confirm 确认模式

2、return 退回模式

RabbitMQ事务

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

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

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

txCommit(),用于提交事务

txRollback().用于回滚事务

RabbitMQ工作原理及实例

实例1 简单模式

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

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

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

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

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

实例2 分发工作模式

循环发送10条信息

消费者

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

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

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

实例3 扇形交换机模式

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

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

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

发送成功后效果为

实例4 BadingKey模式

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

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

实例5 Topics通配符模式

通配符模式认识

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

例如: item. insert

通配符规则:

#:匹配一个或多个词

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

实例

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

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

官网可以查看绑定情况

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

最后我们来登录一下

网站文章

  • CTF入门教程(非常详细)从零基础入门到竞赛,看这一篇就够了!

    CTF入门教程(非常详细)从零基础入门到竞赛,看这一篇就够了!

    CTF(Capture The Flag)中文一般译作夺旗赛,在网络安全领域中指的是网络安全技术人员之间进行技术竞技的一种比赛形式。CTF起源于1996年DEFCON全球黑客大会,以代替之前黑客们通过...

    2024-02-29 13:27:49
  • Jetpack Compose学习之LaunchedEffect

    Jetpack Compose学习之LaunchedEffect

    是干什么的?怎么用?LaunchedEffect是什么?LaunchedEffect就是能让你在Composable中使用协程。@Composablefun HelloContent() { v...

    2024-02-29 13:27:43
  • ubuntu配置wget代理

    ubuntu配置wget代理

    2024-02-29 13:27:15
  • 中国计算机应用大会2021,2021中国计算机教育大会

    中国计算机应用大会2021,2021中国计算机教育大会

    温馨提示:以下是主办方推荐的酒店,离会议中心比较近,不负责预定,如需预定请您直接联系您中意的酒店,请您理解!注:如有住宿需求,请尽快联系酒店方,以免人多预定不到您理想的酒店。如您需要咨询帮助,请添加会...

    2024-02-29 13:27:08
  • ftp服务器防火墙配置文件,详解ftp环境配置解决方案(vsftpd)

    1、 安装vsftpd组件安装命令:[root@ink4t ~]# sudo apt-get install vsftpd安装完后,有/etc/vsftpd/vsftpd.conf 文件,是vsftp...

    2024-02-29 13:27:01
  • html 增加删除,HTML DOM增加删删除操作

    /*** 思路:* 1、获取对象* 2、添加事件* 添加:* 3、创建ul标签* 4、判断inputTxt的值是否为空,为空的话弹出提示,有值的话继续执行添加* 5、创建li标签,创建文本节点;* 6...

    2024-02-29 13:26:31
  • web总结。

    web总结。

    如果你正在阅读这篇文章,你可能是对Web开发有某种兴趣,甚至你开始想去学习Web开发。本文则展示了一个成为一个Web开发者可以遵循的途径。作为一篇初学者指南,本文从学习什么出发到如何专攻。或许对打算进军Web开发的您有所帮助。 前端VS后端 或许你会觉得最初的缺口是前端和后端,所以让我们先看下什么是前端和后端。 前端 Web应用按照客户-服务体系结构分类为分布式应用。所以我们的代码有一...

    2024-02-29 13:26:24
  • 基于easyx库的GUI扫雷项目

    基于easyx库的GUI扫雷项目

    基于easyx库的GUI扫雷项目,适合大家用来练习C语言基础和基本图形库

    2024-02-29 13:26:16
  • LeetCode·每日一题·2437. 有效时间的数目·模拟

    LeetCode·每日一题·2437. 有效时间的数目·模拟

    模拟

    2024-02-29 13:26:08
  • 我用Java内存模型征服了面试官

    我用Java内存模型征服了面试官

    面试官不再是问题

    2024-02-29 13:25:39