虽然后台使用了读写分离技术,能够在一定程度上抗击高并发,但是如果并发量特别巨大时,主数据库不能同时处理高并发的请求,这时数据库容易宕机.

问题:

现在的问题是如何既能保证数据库正常运行,又能实现用户数据的入库操作?

解决方案:

引入rabbitMQ技术:

说明:

当数据库的访问压力过载时,这时会将过载以后的数据先保存到rabbitMQ中.其中的数据结构是队列的形式,先进先出.这时数据库从队列中取数据执行.一直到队列中的数据全部操作完成为止.

RabbitMQ就是消息的中间件.

RabbitMQ介绍:

RabbitMQ性能分析:

1.MSMQ:是微软的产品  应用于.net框架

2.ActiveMQ:是apache的产品 做业务用图广泛

3.RabbitQM:是爱立信的产品(早期手机生产厂商)基于erlang语言(函数式编程大数据  scala语言)

4.ZeroMQ:大数据中应用广泛,缺点容易丢失数据.但是业务系统中使用率较少

5.KafkaMQ:大数据项目中使用,50万/秒  现在主流

5.RabbitMQ环境搭建:

1.配置JDK:

2.固定虚拟机IP地址:

3.连接虚拟机:

编辑文件跳转路径:

Vim  go

Cd /usr/local/src

2.安装rabbitMQ:

1.新建文件rabbitmq

/usr/local/src/rabbitmq

2.将安装文件导入

3.安装rabbitMQ

4.开启远程用户访问:

将文件复制到指定目录下:

cp /usr/share/doc/rabbitmq-server-3.6.1/rabbitmq.config.example  /etc/rabbitmq/rabbitmq.config

修改新复制的文件64行

1.将%%去掉

2.将,号去掉

修改为:

5.开启rabbitMQ:

执行命令:

rabbitmq-plugins enable rabbitmq_management

表示启动成功

6.开放端口15672和5672

iptables -I INPUT -p tcp --dport 15672 -j ACCEPT

访问rabbitMQ的控制台

iptables -I INPUT -p tcp --dport 5672 -j ACCEPT

程序连接rabbitMQ的端口

或者关闭防火墙

7.启动/停止服务

service rabbitmq-server start  启动

service rabbitmq-server stop 停止

service rabbitmq-server restart 重启

8.远程登录:

访问:

http://192.168.154.137:15672/

用户名和密码都是guest

9.视图解析:

10.建立管理员:

11.构建虚拟主机:

11.构建虚拟主机:

6.rabbitMQ的工作模式:

1.简单模式:

p:proverder 生产者

c:consumer  消费者

红色部分:队列    先进先出

原理说明:

生产者负责向队列中添加消息.消费者负责消费队列中的消息.

消费者通过监听器,实时监控消息队列.如果消息队列中有消息则消费,如果没有消息 则等待消息.

2.测试代码:

1.定义Connection

1.1.定义生产者

3.定义消费者:

2.工作模式:

原理说明:

生产者为消息队列中生产消息,多个消费者争抢执行权利,谁抢到谁执行.

实用场景:秒杀业务 抢红包等

测试代码:

3.发布订阅模式:

x:exchange 交换机

P:表示生产者

C1-2:表示多个消费者

原理说明:

当生产者生产消息后,先将消息发往交换机.交换机再将消息发往订阅了当前消息的队列,再次有各个队列的消费者执行.

类似于 广播

定义消费者::

4.路由模式:

x:表示交换机   type=direct  表示路由

路由模式中,需要定义路由key

原理说明:

1.当生产者发布消息时,会定义指定的路由key 例如 key:error

2.这时交换机会根据路由key发往满足条件的队列中.如果队列中没有符合条件的路由key将不能执行该消息.

5.主题模式:

Type:topic  表示主题模式

  • * (star) can substitute for exactly one word.
  • # (hash) can substitute for zero or more words.
  • 有坑 效果一样

7.订单实现RabbitMQ

1.引入配置文件:

classpath:jdbc.propertiesclasspath:env.properties /hp月n、 口山闰廷比二曰站叩四瞿二月当“习 classpath:rabbitmq.properties IUe> /value>" v:shapes="图片_x0020_42">

2.引入生产者

1.引入配置文件

2.定义发送端

3.发送端代码

通过代码相rabbitmq中发送数据

4.定义接收端:

引入配置文件

5.定义接收端:

6.测试成功

源码请加我QQ :1051980588

转载于:https://www.cnblogs.com/zcg1051980588/p/7846131.html

RabbitMQ的简单应用相关推荐

  1. 基于消息中间件RabbitMQ实现简单的RPC服务

    转载自  基于消息中间件RabbitMQ实现简单的RPC服务 RPC(Remote Procedure Call,远程过程调用),是一种计算机通信协议.对于两台机器而言,就是A服务器上的应用程序调用B ...

  2. docker安装rabbitmq及简单管理

    docker安装rabbitmq及简单管理 rabbitmq镜像下载与安装 1.docker search rabbitmq 命令说明:从docker仓库搜索rabbitmq的镜像,类似maven的中 ...

  3. RabbitMq之简单队列

    这里写了一个简单的springboot的demo来处理RabbitMq的简单队列 记录一下步骤. 添加pom依赖 <dependency><groupId>com.rabbit ...

  4. python对RabbitMQ的简单使用

    python对RabbitMQ的简单使用 (一)RabbitMQ的简介 (二)RabbitMQ的安装 (三)python操作RabbitMQ (四)RabbitMQ简单模式 (五)RabbitMQ发布 ...

  5. 初探RabbitMQ与简单实现

    RabbitMQ 简介: RabbitMQ是一个由Erlang语言开发的AMQP的开源实现,高级消息队列协议即Advanced Message Queuing Protocal,是应用层协议的一个开放 ...

  6. RabbitMQ的简单使用

    一.认识MQ 1.同步和异步通讯 微服务间通讯有同步和异步两种方式: 同步通讯:就像打电话,需要实时响应. 异步通讯:就像发邮件,不需要马上回复. 两种方式各有优劣,打电话可以立即得到响应,但是你却不 ...

  7. Docker安装RabbitMQ以及简单使用

    写在前面 为什么选择RabbitMQ? 市场上消息队列的组件有很多,ActiveMQ.RabbitMQ.RocketMQ.kafka等.这里我只是选择其中一种消息队列进行学习,毕竟菜鸡要长得肥一点才好 ...

  8. [c#]RabbitMQ的简单使用

    摘要 Message Queue消息队列,简称MQ,是一种应用程序对应用程序的通信方法,应用程序通过读写出入队列的消息来通信,而无需专用连接来链接它们.消息传递指的是程序之间通过在消息中发送数据进行通 ...

  9. RabbitMQ一个简单可靠的方案(.Net Core实现)

    前言 最近需要使用到消息队列相关技术,于是重新接触RabbitMQ.其中遇到了不少可靠性方面的问题,归纳了一下,大概有以下几种: 1. 临时异常,如数据库网络闪断.http请求临时失效等: 2. 时序 ...

  10. RabbitMQ的简单示例

    首先导入jar包 RabbitMQ示例图示 其中P代表生产者.C表示消费者.中间红色部分代表消息队列 生产者代码如下: package com.rabbit; import java.io.IOExc ...

最新文章

  1. Pandas使用to_dict函数将dataframe转化为字典(dict)格式数据并指定orientation参数生成不同形式的字典
  2. CCF NOI1040 除法游戏
  3. [*开同*看] 星际情书
  4. Linux上 Can‘t connect to X11 window server using XX as the value of the DISPLAY 错误解决方法
  5. mysql中判断字段为空
  6. IDEA 2020.1打开时闪退的问题及解决方法
  7. mac安装完mysql后关机特别慢_解决Mac升级到10.12后关机很慢的问题
  8. HDU多校10 - 6880 Permutation Counting(dp+思维)
  9. CircularFifoQueue队列API
  10. redis用list做消息队列
  11. PHP的静态变量和引用函数
  12. Matlab高级教程_第一篇:Matlab基础知识提炼_02
  13. gstreamer实现sink插件的代码,及无法结束的问题
  14. 【数学建模】【lingo】lingo的基本操作
  15. 四元数与欧拉角(数学推导)
  16. 搭建以图搜图检索系统
  17. 用PS做自己的个人LOGO
  18. 动画3D变形:平移、旋转、缩放
  19. 国民技术计划1.4亿入股华夏芯
  20. iOS第三方验证简单接入Game Center

热门文章

  1. 二叉树遍历——先序遍历
  2. mysql upsert语法_Mysql - Upsert功能实现
  3. 企业如何用InfBox架设自己的内部即时信息IM服务器
  4. 数据处理方法-算术编码(香农算法、java编码实现)
  5. C++ Socket网络编程
  6. 从RMSE和MSE到更多选择:探索机器学习模型性能指标
  7. java文件下载错误提示_java文件下载出错
  8. 必须得会的汽车ECU研发基础—软件开发流程6
  9. Maven | filtering,filter和profile标签使用
  10. 进程与程序的联系与区别