即时聊天技术实现方案 本文关键词:即时,聊天,方案,技术
即时聊天技术实现方案 本文简介:即时聊天技术实现方案炎炎互动数码科技有限公司蔡鑫即时聊天技术实现方案编写:蔡鑫日期:2012年10月12日ActiveMQ简介1.什么是ActiveMQActiveMQ是Apache出品,最流行的,能力强劲的开源消息中间件,应用中引入中间件的好处是减少服务器之间的依赖关系,提高扩展性,在没有引入消息
即时聊天技术实现方案 本文内容:
即时聊天技术实现方案
炎炎互动数码科技有限公司
蔡鑫
即时聊天技术实现方案
编写:
蔡鑫
日期:
2012年10月12日
ActiveMQ
简介
1.
什么是ActiveMQ
ActiveMQ
是Apache出品,最流行的,能力强劲的开源消息中间件,应用中引入中间件的好处是减少服务器之间的依赖关系,提高扩展性,在没有引入消息中间件的情况可能出现如下:
出现服务器多依赖的情况,不方面扩展,而引入消息中间件后如
从图中可以看出引入消息中间件后,每个服务器只依赖于消息中间件,而且在应用中这种依赖关系式一种弱依赖关系
2.
ActiveMQ
的松耦合介绍
松耦合应用在分布式应用设计中更具优势;也是对分布式应用至关重要的。
3.
ActiveMQ
的特性
n
多种语言和协议编写客户端。语言:
Java、C、C++、C#、Ruby、Perl、Python、PHP。应用协议:OpenWire、Stomp
REST、WS
Notification、XMPP、AMQP
n
完全支持JMS1.1和J2EE
1.4规范
(持久化,XA消息,事务)
n
对Spring的支持,ActiveMQ可以很容易内嵌到使用Spring的系统里面去,而且也支持Spring2.0的特性
n
通过了常见J2EE服务器(如
Geronimo、JBoss
4、GlassFish、WebLogic)的测试,其中通过JCA
1.5
resource
adaptors的配置,可以让ActiveMQ可以自动的部署到任何兼容J2EE
1.4
商业服务器上
n
支持多种传送协议:in-VM、TCP、SSL、NIO、UDP、JGroups、JXTA
n
支持通过JDBC和journal提供高速的消息持久化
n
从设计上保证了高性能的集群,客户端-服务器,点对点
n
支持Ajax
n
支持与Axis的整合
n
可以很容易得调用内嵌JMS
provider,进行测试
ActiveMQ
安装和下载
4.
安装
n
在http://activemq.apache.org/download.html
下载5.4.0发行包,解压到需要安装ActiveMQ的文件夹,记为/path/to/activemq。
n
unix环境activemq文件夹需要执行权限,执行如下命令
chmod
-R
755
/path/to/activemq
5.
启动
n
window环境运行/path/to/activemq/bin/activemq.bat
n
unix环境运行/path/to/activemq/bin/activemq
6.
测试
ActiveMQ默认使用的TCP连接端口是61616,通过查看该端口的信息可以测试ActiveMQ是否成功启动
n
window环境运行
netstat
-an|find
“61616“n
unix环境运行netstat
-an|grep
61616
7.
监控
ActiveMQ5.0版本默认启动时,启动了内置的jetty服务器,提供一个demo应用和用于监控ActiveMQ的admin应用。
admin:http://127.0.0.1:8161/admin/
demo:http://127.0.0.1:8161/demo/
ActiveMQ基础实例
8.
消息生产者
//通过
用户密码URL
创建接口工厂
ConnectionFactory
factory
=
new
ActiveMQConnectionFactory(
ActiveMQConnection.DEFAULT_USER,ActiveMQConnection.DEFAULT_PASSWORD,“tcp://localhost:61616“);
//通过连接工厂创建一个新的连接
Connection
connection
=
factory.createConnection();
//通过连接接口创建一个回话
Session
session
=
connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
//根据回话接口创建有关的目标接口
Destination
destination
=
session.createQueue(“Mr
Yan“);
//回话接口再根据目标接口创建一个消息生产者接口
MessageProducer
messageProducer
=
session.createProducer(destination);
//调用回话创建一个文本消息
Message
message
=
session.createTextMessage(“I
am
very
happy
either“);
//使用消息生产者接口将消息传送至
ActiveMQ
服务器
messageProducer.send(message);
session.close();
connection.close();
9.
消息消费者
//
通过username,password,url创建连接工厂接口
ConnectionFactory
factory
=
new
ActiveMQConnectionFactory(
ActiveMQConnectionFactory.DEFAULT_USER,ActiveMQConnectionFactory.DEFAULT_PASSWORD,“tcp://localhost:61616“);
//
通过连接工厂创建一个新的连接接口
Connection
connection
=
factory.createConnection();
connection.start();
//
通过连接接口创建一个会话接口
Session
session
=
connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
//
会话接口创建有关主题的目标接口
Destination
destination
=
session.createQueue(“Mr
Liu“);
//
会话接口再根据目标接口来创建一个消息消费者接口
MessageConsumer
consumer
=
session.createConsumer(destination);
//
消息消费者接收消息
TextMessage
message
=
(TextMessage)consumer.receive();
if
(message
!=
null)
{
System.out.println(“收到的消息:“+
message.getText());
}
session.close();
connection.close();
10.
消息发送流程
然后调用发布接口发布消息,发布过程如下:
11.
消息接收流程
JMS
简介
12.
JMS
中的概念
2
JMS客户端:接收或发送消息的java系统
2
JMS消息体:系统间发送的消息体
2
JMS提供商:JMS规范实现厂商
2
JMS管理对象:预先配置好的用于JMS客户端的JMS对象。如ConnectionFactory跟JMS服务端的连接工厂,Destination
接收和发送消息的目标地址等
2
JMS
Domain:JMS定义了两种域模型,一种是PTP(point-to-point)即点对点消息传输模型,一种是pub/sub(publish-subscribe)即发布订阅模型。
PTP通过一个先进先出的queue实现。很多人在这个PTP概念上有所误解,所谓点对点不是指生产者和消费者只有一个。PTP如下图所示:
我们可以看到,一个或多个生产者发送消息,消息m2先抵达了queue,然后m1也发出了,并一同存在于一个先进先出的queue里面。消费者也存在一个或多个,对queue里的消息进行消费。但消息被随机的一个消费者消费且仅消费一次。
在pub/sub消息模型中,消息被广播给所有订阅者。如下图:
13.
JMS
接口
JMS通用接口
JMS
PTP接口
JMS
pub/sub
接口
描述
ConnectionFactory
QueueConnectionFactory
TopicConnectionFactory
创建与JMS服务的连接
Connection
QueueConnection
TopicConnection
JMS服务的连接,可创建Session
Destination
Queue
Topic
发送接收消息的目标,Queue和Topic均可视为一种Destination
Session
QueueSession
TopicSession
Session
MessageProducer
QueueSender
TopicPublisher
消息发送者
MessageConsumer
QueueReceiver、QueueBrowser
TopicSubscriber
消息接收者/浏览者/订阅者
14.
JMS
接口关系图
15.
聊天室主要功能
1.
创建房间。
2.
进入房间。
3.
多人即时聊天。
4.
发送文字。