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

问题:

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

解决方案:

引入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

RabbitMQ的简单应用的更多相关文章

  1. rabbitmq的简单介绍一

    该博客的主要讲解了以下几种rabbitmq的用法1.实现简单的生产者发送消息给消费者2.实现序列持久化3.实现消息持久化4.实现消息公平分发5.实现广播6.实现组播7.实现细分组播 先来看下rabbi ...

  2. java操作rabbitmq实现简单的消息发送(socket编程的升级)

    准备: 1.下载rabbitmq并搭建环境(和python那篇一样:http://www.cnblogs.com/g177w/p/8176797.html) 2.下载支持的jar包(http://re ...

  3. RabbitMQ的简单封装

    一般在工作中,都是直接使用已经封装好的mq的程序集进行功能开发.所以很多时候都没有去了解rabbitmq到底是如何封装(实现使用的).所以心血来潮,简单记录下自己对rabbitmq的简单封装 整体的思 ...

  4. 关于RabbitMQ的简单理解

    说明:想要理解RabbitMQ,需要先理解MQ是什么?能做什么?然后根据基础知识去理解RabbitMQ是什么.提供了什么功能. 一.MQ的简单理解 1. 什么是MQ? 消息队列(Message Que ...

  5. RabbitMq(2) 简单消息队列

    <dependency> <groupId>com.rabbitmq</groupId> <artifactId>amqp-client </ar ...

  6. RabbitMq 之简单队列

    简单队列类似于我们的生产者,消费者, 一个生产者,对应一个消费者. 直接上代码: package com.j1.rabbitmq.simple; import com.j1.rabbitmq.util ...

  7. rabbitMQ的简单实例——amqp协议带数据回写机制

    rabbitMQ是一种高性能的消息队列,支持或者说它实现了AMQP协议(advanced message queue protocol高级消息队列协议). 下面简单讲一讲一个小例子.我们首先要部署好r ...

  8. RabbitMQ (二) 简单队列

    参考:https://blog.csdn.net/vbirdbest/article/details/78583480 简单队列的模型: P : 生产者,即 Producer C : 消费者,即 Co ...

  9. RabbitMq的简单使用

    本篇将介绍RabbitMq的一个简单使用例子,分别介绍生产者如何发送消息,消费者如何接收和处理消息 关于RabbitMQ的知识背景的文章非常多.我对它的总结是,解决高并发请求的瓶颈,将应用程序真正处理 ...

  10. RabbitMQ安装&简单使用

    .什么是RabbitMQ.详见 http://www.rabbitmq.com/. 作用就是提高系统的并发性,将一些不需要及时响应客户端且占用较多资源的操作,放入队列,再由另外一个线程,去异步处理这些 ...

随机推荐

  1. 使用IGP和BGP的配合达到降低路由容量目的的实验与总结

    概述 1.先说结论,通过eBGP协议,可以显著降低对非核心路由器的路由容量要求,因为核心路由器的数量明显少于非核心路由器,所以,通过此措施即联通网络,又降低设备要求,非常适宜大型网络. 2.因为网络规 ...

  2. 通信技术:SSE设计方案(一)--- 前端Server-Sent Events概念讲解和基础类库完善发布

    好了,开篇还是要扯扯的,否则感觉这个技术讲的么有那么冻人,嗯,这个晚上是有点冷了,秋衣秋裤大家都该加起来了,反正我不帮你买,妹子除外,嘻嘻. 之前几篇博客,研究前端通信技术的第一层ajax技术,从最基 ...

  3. Unity 使用 陀螺仪 实现 《王者荣耀》 登入界面 背景动态效果

    在 <王者荣耀> 登入界面 左右上下晃动手机(有些手机不支持)可以看到背景在变化 我使用的是iPhone SE 效果如下: 对比两张图片的左下角 可以看到差异 至于为什么要这么做: 1.使 ...

  4. stringstream缓存正确清除方法

    当需要清空stringsteam缓存的时候,到底是.str("")呢还是.clear(); 实际上,我认为,保守起见,两者都需要 clear() 是清除 state flag st ...

  5. PHP知识大全

    --------------------------------------------------------- PHP知识大全 ---------------------------------- ...

  6. 《剑指Offer》面试题5-替换空格

    题目:请实现一个函数,把字符串中的每个空格替换成"%20".例如输入"We are happy.",则输出"We%20are%20happy.&quo ...

  7. viewpager的滑动

    在一个已经是月黑风高快下班的时刻了,我们产品突然通知我们开会,要添加一个功能,他闲来无聊随便戳了戳facebook,说点开联系人的那个横向滑动的卡片式的效果不错,让我们在我们的app里添加这个效果,我 ...

  8. css3中“渐变”兼容性解决方案

    这次是简单的谈一下我们常见的渐变在各个浏览器下的兼容性问题,算一个比较简单的问题. 我们熟知的浏览器有Chrome.Firefox.Opera.Safari以及ie系列.最基础的background: ...

  9. 探索equals()和hashCode()方法

    探索equals()和hashCode()方法 在根类Object中,实现了equals()和hashCode()这两个方法,默认: equals()是对两个对象的地址值进行的比较(即比较引用是否相同 ...

  10. MongoDB用户权限管理

    创建用户账号: (roles参数指定了用户的角色以及这个账号授权的数据库,在同一个数据库中不能同时创建两个用户名相同的账号) Mongodb内置的用户角色: 数据库用户角色:read.readWrit ...