RabbitMQ的简单应用【转】
虽然后台使用了读写分离技术,能够在一定程度上抗击高并发,但是如果并发量特别巨大时,主数据库不能同时处理高并发的请求,这时数据库容易宕机.
问题:
现在的问题是如何既能保证数据库正常运行,又能实现用户数据的入库操作?
解决方案:
引入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 重启
1、服务器启动与关闭
启动:service rabbitmq-server start
关闭:service rabbitmq-server stop
重启:service rabbitmq-server restart
2、用户管理
新增 rabbitmqctl add_user admin admin
删除 rabbitmqctl delete_user admin
修改 rabbitmqctl change_password admin admin123
用户列表 rabbitmqctl list_users
设置角色 rabbitmqctl set_user_tags admin administrator monitoring policymaker management
设置用户权限 rabbitmqctl set_permissions -p VHostPath admin ConfP WriteP ReadP
查询所有权限 rabbitmqctl list_permissions [-p VHostPath]
指定用户权限 rabbitmqctl list_user_permissions admin
清除用户权限 rabbitmqctl clear_permissions [-p VHostPath] admin
8.远程登录:
访问:
用户名和密码都是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.测试成功
原文地址:http://www.cnblogs.com/zcg1051980588/p/7846131.html
RabbitMQ的简单应用【转】的更多相关文章
- rabbitmq的简单介绍一
该博客的主要讲解了以下几种rabbitmq的用法1.实现简单的生产者发送消息给消费者2.实现序列持久化3.实现消息持久化4.实现消息公平分发5.实现广播6.实现组播7.实现细分组播 先来看下rabbi ...
- java操作rabbitmq实现简单的消息发送(socket编程的升级)
准备: 1.下载rabbitmq并搭建环境(和python那篇一样:http://www.cnblogs.com/g177w/p/8176797.html) 2.下载支持的jar包(http://re ...
- RabbitMQ的简单封装
一般在工作中,都是直接使用已经封装好的mq的程序集进行功能开发.所以很多时候都没有去了解rabbitmq到底是如何封装(实现使用的).所以心血来潮,简单记录下自己对rabbitmq的简单封装 整体的思 ...
- 关于RabbitMQ的简单理解
说明:想要理解RabbitMQ,需要先理解MQ是什么?能做什么?然后根据基础知识去理解RabbitMQ是什么.提供了什么功能. 一.MQ的简单理解 1. 什么是MQ? 消息队列(Message Que ...
- RabbitMq(2) 简单消息队列
<dependency> <groupId>com.rabbitmq</groupId> <artifactId>amqp-client </ar ...
- RabbitMq 之简单队列
简单队列类似于我们的生产者,消费者, 一个生产者,对应一个消费者. 直接上代码: package com.j1.rabbitmq.simple; import com.j1.rabbitmq.util ...
- rabbitMQ的简单实例——amqp协议带数据回写机制
rabbitMQ是一种高性能的消息队列,支持或者说它实现了AMQP协议(advanced message queue protocol高级消息队列协议). 下面简单讲一讲一个小例子.我们首先要部署好r ...
- RabbitMQ (二) 简单队列
参考:https://blog.csdn.net/vbirdbest/article/details/78583480 简单队列的模型: P : 生产者,即 Producer C : 消费者,即 Co ...
- RabbitMq的简单使用
本篇将介绍RabbitMq的一个简单使用例子,分别介绍生产者如何发送消息,消费者如何接收和处理消息 关于RabbitMQ的知识背景的文章非常多.我对它的总结是,解决高并发请求的瓶颈,将应用程序真正处理 ...
- RabbitMQ安装&简单使用
.什么是RabbitMQ.详见 http://www.rabbitmq.com/. 作用就是提高系统的并发性,将一些不需要及时响应客户端且占用较多资源的操作,放入队列,再由另外一个线程,去异步处理这些 ...
随机推荐
- 【ABAP系列】SAP ABAP模块-memory内存数据传输的例子
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP ABAP模块-memor ...
- Island Transport 【HDU - 4280】【最大流Dinic】
题目链接 可以说是真的把时间卡爆了,不断的修改了好多次之后才A了,一直T一直T,哭了…… 可以说是很练时间优化了,不断的改,不断的提交,最后竟然是改了Dinic中的BFS()中,我们一旦搜索到了T之后 ...
- python中进程池和回调函数
一.数据共享 1.进程间的通信应该尽量避免共享数据的方式 2.进程间的数据是独立的,可以借助队列或管道实现通信,二者都是基于消息传递的. 虽然进程间数据独立,但可以用过Manager实现数据共享,事实 ...
- Linux系统的镜像文件iso下载地址
CentOS-6.1-x86_64-bin-DVD1.iso 官方网址:http://archive.kernel.org/centos-vault/6.1/isos/x86_64/ 下载链接地址:h ...
- Java 遍历某个目录
import java.io.File; import java.io.IOException; public class DirErgodic { public static void find(S ...
- vue使用vue-router beforEach实现判断用户登录跳转路由筛选
vue使用vue-router beforEach实现判断用户登录跳转路由筛选 :https://www.colabug.com/3306814.html 在开发webApp的时候,考虑到用户体验,经 ...
- java_第一年_JDBC(4)
注:该篇只是为了小白的我熟悉下JDBC的代码,练习篇 在mysql中建test测试库,并创建一张employees表,加入一些数据如下图: 通过JDBC连接对表中数据进行添加: package lzj ...
- go 文件读写
go 文件读写有很多方式 ioutil读文件 package main import ( "io/ioutil" "fmt" ) func main() { d ...
- jar包/class文件如何快速反编译成java文件
有时编写的java代码打包为可执行jar包后需要查看工程结构是否是且只有我们需要的包,故需要查看jar包层级. 1.windows系统可以直接在网上下载jd-gui.exe包,然后傻瓜安装: 2.Ma ...
- 利用java反射动态调用方法,生成grid数据
项目中需要java后台查询并组装前台grid的数据,数据行数不定,数据行定义不定,开始用了最原始的方法,写了几百行,就是前台需要什么字段后台拼接什么字段,java代码冗余量非常大,并且不够灵活,一旦前 ...