rabbitmq介绍122PPT课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《rabbitmq介绍122PPT课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- rabbitmq 介绍 122 PPT 课件
- 资源描述:
-
1、RabbitMQ介绍目录l 什么是MQl MQ有什么优势l 哪些情况下建议使用MQl 什么是RabbitMQl 选择RabbitMQ理由l RabbitMQ服务场景l RabbitMQ结构图l RabbitMQ名词解释目录l RabbitMQ客户端使用流程(productor/cunsumer)l Productor范例代码及注意事项l Consumer范例代码及注意事项l 开发中注意事项及重点关注异常处理l RabbitMQ服务端配置及重点参数l RabbitMQ与Spring整合范例代码 什么是MQ? MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方
2、法(消息传递),一般用作进程间通讯 MQ有什么优势? MQ本身是异步的,往队列里发送消息后无需等待,不同于通信协议。如HTTP协议(同步),客户端发出请求后必须等待服务器回应 哪些情况下建议使用MQ 高并发应用来不及处理,实时性要求不高 多应用之间异步通信,且耗时操作什么是RabbitMQ RabbitMQ是由Erlang(爱立信公司)语言开发,实现Advanced Message Queuing Protocol (AMQP高级消息队列协议)的消息中间件。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。选择RabbitMQ理由Reliability可靠性 E
3、xchange交换机、Queue队列、Message消息持久化、高可用性Flexible Routing 灵活路由Clustering 集群 分为Disc(硬盘)与RAM(内存),保证至少一台DiscHighly Available Queues高可用队列 与集群结合使用,设置队列间的消息同步Management UI管理界面异常情况下RabbitMQ处理方式(单机丢失/网络丢失/掉电/队列爆满) 单机丢失RabbitMQ支持集群,多台机器队列同步,丢失消息可从其他机器上获取 网络丢失 掉电RabbitMQ支持持久化,数据保存在硬盘上 队列爆满RabbitMQ支持流控机制,可修改内存大小,默认
4、为机器内存的40%RabbitMQ服务场景 应用程序之间无需即时返回且耗时操作(异步) Work Queues(消息均匀分配消息给消费者) Publish/Subscribe(广播模式,消息分发给所有的消费者) Routing(消费者接收消息由路由规则决定,简单路由名) Topics(消费者接收消息由路由规则决定,路由规则名比较复杂) RPC远程调用(同步)RabbitMQ结构图RabbitMQ名词解释 Broker:消息队列服务器实体,例如RabbitMQ服务 Vhost:虚拟主机,默认为“/”,一个broker里可以有多个vhost,区分不同用户权限,类似java的命令空间 Connect
5、ion:应用程序与broker连接,可有多个连接 Channel:消息通道,connection中可建立多个channel,每个channel代表一个会话任务,所有操作都在channel中进行。RabbitMQ名词解释 Exchange:消息交换机,channel中可有多个,用于投递消息。应用程序发送消息时先把消息给交换机,由交换机投递给队列,不是直接给队列 Queue:队列,用于存放消息 Message:消息,应用程序需要发送的数据 Bind:根据routingKey绑定exchange与queue规则,决定消息发送的方向RabbitMQ对象间关系broker可多个Connection可多个
6、Channel可多个Exchange可多个QueuemessageExchange主要3种类型 Fanout:不处理路由键(没有routingKey ),只需把队列绑定到交换机上。发送到交换机的消息都会转发到与该交换机绑定的所有队列上,类似于广播,转发消息是最快的Exchange主要3种类型 Direct:处理路由键(有routingKey )。将一队列绑定到交换机上,该消息需与一个特定的路由键( routingKey )完全匹配Exchange主要3种类型 Topic:与direct类似,功能更强,支持模糊绑定 *表示通配一个词 #表示通配0个或多个词RabbitMQ客户端使用流程(prod
7、uctor/cunsumer)Productor范例代码及注意事项 /以exchange为direct为例 package com.rabbitmq.test.ow.demo2; import java.io.IOException; import com.rabbitmq.client.BlockedListener; import com.rabbitmq.client.Channel; import com.rabbitmq.client.Connection; import com.rabbitmq.client.ConnectionFactory; import com.rabbit
8、mq.client.MessageProperties; import com.rabbitmq.client.ShutdownListener; import com.rabbitmq.client.ShutdownSignalException; import com.rabbitmq.client.impl.AMQCommand; import com.rabbitmq.client.impl.AMQImpl; /* * Title: Producer.java * Description: 【生产者样例】 * author: zengqiang.yang * date: 2013-12
9、-25 * * 版权所有 (c) 2013,天翼电子商务有限公司 */ public class Producer /交换机命名规范:e_模块_其他private static final String EXCHANGE_NAME = e_tyb_test;/routingkey命名规范:r_模块_其他private static final String ROUTING_KEY = r_tyb_test;public static void main(String argv) throws Exception /注意:factory应为单例,不要每次取消息新建一次对象ConnectionFa
10、ctory factory = new ConnectionFactory();factory.setHost(192.168.225.190);factory.setPort(5672);/ 默认端口Productor范例代码及注意事项factory.setUsername(guest);/ 默认用户名factory.setPassword(guest);/ 默认密码factory.setVirtualHost(/);/ 默认虚拟主机,区分权限/ 设置心跳时间,防止长时间未活动被防火墙杀死,默认600秒,单位:秒 /factory.setRequestedHeartbeat(60*4); /
11、连接超时时间,单位:毫秒 /factory.setConnectionTimeout(1000*2);/注意:connection应为单例,不要每次取消息新建一次对象Connection connection = factory.newConnection();/监听connection关闭异常 connection.addShutdownListener(new ShutdownListener() Override public void shutdownCompleted(ShutdownSignalException cause) /connection异常 if (cause.isH
12、ardError() System.out.println(connection异常: + cause.getMessage() + ); /程序引起的异常,如:connection.close() if (cause.isInitiatedByApplication() System.out.println(connection关闭异常,重连.begin.); / connection = factory.newConnection(); System.out.println(connection关闭异常,重连.end.); else/rabbitmq服务引起的异常 AMQCommand a
13、mqCommand = (AMQCommand)cause.getReason(); if( amqCommand.getMethod() instanceof AMQImpl.Connection.Close ) AMQImpl.Connection.Close close = (AMQImpl.Connection.Close)amqCommand.getMethod(); if( 320=close.getReplyCode() )/rabbitmq服务器强制关闭 System.out.println(connection关闭异常,请检查rabbitmq服务器是否正常启动!); );Pr
14、oductor范例代码及注意事项 /监听connection阻塞异常 connection.addBlockedListener(new BlockedListener() Override public void handleUnblocked() throws IOException System.out.println(connection已解除阻塞!); Override public void handleBlocked(String reason) throws IOException System.out.println(connection阻塞原因:+reason+,请检查内存
15、是否够!); ); /注意:channel应为单例,不要每次取消息新建一次对象Channel channel = connection.createChannel();/监听channel关闭异常channel.addShutdownListener(new ShutdownListener() Override public void shutdownCompleted(ShutdownSignalException cause) /channel异常 if (!cause.isHardError() System.out.println(channel异常: + cause.getMess
16、age() + ); );Productor范例代码及注意事项/* * 创建交换机 * exchange交换机名 * type交换机类型fanout:广播模式,所有消费者都能收到生产者发送的消息,速度更快,不需设置routingkey * direct:只有与routingkey配置的消费者才能收到消息 * topic:与direct相同,只是支持模糊配置,类似正则表达式,功能更强, * *表示通配一个词,#表示通配0个或多个词(注意:是词,不是字母) * * durabledurable=true,交换机持久化,rabbitmq服务重启交换机依然存在,保证不丢失; * durable=fal
17、se,相反 * */channel.exchangeDeclare(EXCHANGE_NAME, direct,true);/模拟发送消息for (int i = 0; i 100; i+) String message = Hello World!; message += i; /* * exchange交换机名, 为默认交换机,direct类型 * routingKeyexchange为direct、topic类型时指定routingKey,exchange为fanout类型时指定queueName队列名 * props MessageProperties.PERSISTENT_TEXT_
18、PLAIN:消息持久化,rabbitmq服务重启消息不会丢失;null:非持久化 * body发送消息 */ channel.basicPublish(EXCHANGE_NAME, ROUTING_KEY, MessageProperties.PERSISTENT_TEXT_PLAIN, message.getBytes(); System.out.println( x Sent + message + ); /关闭连接 / channel.close(); / connection.close(); Productor范例代码及注意事项 ConnectionFactory、Connectio
19、n、Channel注意单例控制 默认心跳时间为10分钟,发现个人账户环境防火墙为5分钟,有可能被防火墙杀死,建议设置4分钟connectionFactory.setRequestedHeartbeat(4*60); 添加Shutdown、Blocked异常监听,Shutdown后重连机制、Blocked后的日志输出Consumer范例代码及注意事项 /以exchange为direct为例 package com.rabbitmq.test.ow.demo2; import java.io.IOException; import java.util.HashMap; import java.ut
20、il.Map; import com.rabbitmq.client.BlockedListener; import com.rabbitmq.client.Channel; import com.rabbitmq.client.Connection; import com.rabbitmq.client.ConnectionFactory; import com.rabbitmq.client.QueueingConsumer; import com.rabbitmq.client.ShutdownListener; import com.rabbitmq.client.ShutdownSi
21、gnalException; import com.rabbitmq.client.impl.AMQCommand; import com.rabbitmq.client.impl.AMQImpl; /* * Title: Consumer.java * Description: 【消费者样例】 * author: zengqiang.yang * date: 2013-12-25 * * 版权所有 (c) 2013,天翼电子商务有限公司 */Consumer范例代码及注意事项 public class Consumer / 交换机命名规范:e_模块_其他private static fina
22、l String EXCHANGE_NAME = e_tyb_test;/ 队列命名规范:q_模块_其他private static final String QUEUE_NAME = q_tyb_test;/ routingkey命名规范:r_模块_其他private static final String ROUTING_KEY = r_tyb_test;public static void main(String argv) throws Exception / 注意:factory应为单例,不要每次取消息新建一次对象 ConnectionFactory factory = new Co
23、nnectionFactory(); factory.setHost(192.168.225.190); factory.setPort(5672);/ 默认端口 factory.setUsername(guest);/ 默认用户名 factory.setPassword(guest);/ 默认密码 factory.setVirtualHost(/);/ 默认虚拟主机,区分权限 / 设置心跳时间,防止长时间未活动被防火墙杀死,默认600秒,单位:秒 / factory.setRequestedHeartbeat(60*4); Consumer范例代码及注意事项/连接超时时间,单位:毫秒 /fa
24、ctory.setConnectionTimeout(1000*2);/ 注意:connection应为单例,不要每次取消息新建一次对象Connection connection = factory.newConnection();/监听connection关闭异常 connection.addShutdownListener(new ShutdownListener() Override public void shutdownCompleted(ShutdownSignalException cause) /connection异常 if (cause.isHardError() Syst
25、em.out.println(connection异常: + cause.getMessage() + ); /程序引起的异常,如:connection.close() if (cause.isInitiatedByApplication() System.out.println(connection关闭异常,重连.begin.); / connection = factory.newConnection(); System.out.println(connection关闭异常,重连.end.); Consumer范例代码及注意事项else/rabbitmq服务引起的异常服务引起的异常 AMQ
展开阅读全文