欢迎来到 IT实训基地-南通科迅教育
咨询电话:0513-81107100
RabbitMQ消息队列入门篇(环境配置+Java实例+基础概念)
2016/4/8
南通科迅教育
689
南通零基础IT培训班学费
 

一、消息队列使用场景或者其好处

消息队列一般是在项目中,将一些无需即时返回且耗时的操作提取出来,进行了异步处理,而这种异步处理的方式大大的节省了服务器的请求响应时间,从而提高了系统的吞吐量。

在项目启动之初来预测将来项目会碰到什么需求,是极其困难的。消息队列在处理过程中间插入了一个隐含的、基于数据的接口层,两边的处理过程都要实现这一接口。这允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束。消息队列可以解决这样一个问题,也就是其解耦性。解耦伴随的好处就是降低冗余,灵活,易于扩展。峰值处理能力:当你的应用上了Hacker News的首页,你将发现访问流量攀升到一个不同寻常的水平。在访问量剧增的情况下,你的应用仍然需要继续发挥作用,但是这样的突发流量并不常见;如果为以能处理这类峰值访问为标准来投入资源随时待命无疑是巨大的浪费。使用消息队列能够使关键组件顶住增长的访问压力,而不是因为超出负荷的请求而完全崩溃。
消息队列还有可恢复性、异步通信、缓冲………等各种好处,在此不一一介绍,用到自然理解。

二、RabbitMQ来源

RabbitMQ是用Erlang实现的一个高并发高可靠AMQP消息队列服务器。显然,RabbitMQErlangAMQP有关。下面简单介绍一下ErlangAMQPErlang是一门动态类型的函数式编程语言,它也是一门解释型语言,由Erlang虚拟机解释执行。从语言模型上说,Erlang是基于Actor模型的实现。在Actor模型里面,万物皆Actor,每个Actor都封装着内部状态,Actor相互之间只能通过消息传递这一种方式来进行通信。对应到Erlang里,每个Actor对应着一个Erlang进程,进程之间通过消息传递进行通信。相比共享内存,进程间通过消息传递来通信带来的直接好处就是消除了直接的锁开销(不考虑Erlang虚拟机底层实现中的锁应用)

AMQP(Advanced Message Queue Protocol)定义了一种消息系统规范。这个规范描述了在一个分布式的系统中各个子系统如何通过消息交互。而RabbitMQ则是AMQP的一种基于erlang的实现。AMQP将分布式系统中各个子系统隔离开来,子系统之间不再有依赖。子系统仅依赖于消息。子系统不关心消息的发送者,也不关心消息的接受者。

这里不必要对ErlangAMQP作过于深入介绍,毕竟本文RabbitMQ才是主角哦,哈哈。下面直接看主角表演(实例)啦,至于主角的一些不得不深入介绍的点我们放到最后面。

三、RabbitMQ实例(Java

3.1、环境配置

RabbitMQ的运行需要erlang的支持,因此我们先安装erlang
32
位下载地址:http://www.erlang.org/download/otp_win64_18.2.1.exe
64
位下载地址:http://www.erlang.org/download/otp_win32_18.2.1.exe
双击选择默认安装就好。前面我们也讲到RabbitMQ就是一个服务器,下面我们就安装对应服务器。

rabbitmq-server start

接下来自然是jar包依赖,本文工程采用eclipse + mavenmaven依赖如下:

com.rabbitmq

amqp-client

3.0.4

commons-lang

commons-lang

2.6

3.2、例子一代码和效果

新建发送者Send.java,代码如下:

package com.luo.rabbit.test.one;

import com.rabbitmq.client.Channel;

import com.rabbitmq.client.Connection;

import com.rabbitmq.client.ConnectionFactory;

public class Send { //队列名称private final static String QUEUE_NAME = "queue";public static void main(String[] argv)

throws java.io.IOException/** 

* 创建连接连接到MabbitMQ 

*/ConnectionFactory factory = new ConnectionFactory();  

//设置MabbitMQ所在主机ip或者主机名   

factory.setHost("127.0.0.1"); 

//创建一个连接Connection connection = factory.newConnection();  

//创建一个频道Channel channel = connection.createChannel();  

//指定一个队列channel.queueDeclare(QUEUE_NAME, false, false, false, null);  

//发送的消息String message = "hello world!";  

//往队列中发出一条消息channel.basicPublish("", QUEUE_NAME, null, message.getBytes());System.out.println("Sent '" + message + "'");  

//关闭频道和连接channel.close();connection.close();}}

3.3、例子二代码和效果

例子一可能通俗易懂,但是并不是很规范,而且有些缺陷,比如我要发送一个对象过去呢?下面看另外一个例子:首先建一个连接类,因为发送者和接收者的连接代码都是一样的,之后让二者继承这个连接类即可。连接类码BaseConnector.java

三、RabbitMQ使用的道具的具体介绍

RabbitMQ是用Erlang实现的一个高并发高可靠AMQP消息队列服务器。

Erlang就是RabbitMQ的一个依赖环境,这里没什么好说的。我们更加关注它的一身表演技巧哪里来的,这里就看AMQP吧,看完AMQP之后估计你会对RabbitMQ的理解更加深刻。

77
关闭
先学习,后交费申请表
每期5位名额
在线咨询
免费电话
QQ联系
先学习,后交费
TOP
您好,您想咨询哪门课程呢?
关于我们
机构简介
官方资讯
地理位置
联系我们
0513-91107100
周一至周六     8:30-21:00
微信扫我送教程
手机端访问
南通科迅教育信息咨询有限公司     苏ICP备15009282号     联系地址:江苏省南通市人民中路23-6号新亚大厦三楼             法律顾问:江苏瑞慈律师事务所     Copyright 2008-