Java消息服务(JMS)学习小结-1
上一篇 / 下一篇 2012-07-13 15:29:27 / 个人分类:Java
消息服务是指,两个或者多个客户机能够通过发送和接受消息(以对等的方式)通信。消息是通过消息服务器有一个客户机发送到另一个客户机的“一块”数据,可以是文本的,也可是数值的,如果客户机是Java应用程序,数据还可以包括对象。其中客户机不需要同时运行。
$O p9tp%e+y3@051Testing软件测试网*^iTU8W)Z4E使用消息服务的原因:51Testing软件测试网u8z%b;b NX5Cm
51Testing软件测试网rS0}[:QT h1、松散耦合但是高内聚。使用消息服务的客户机不需要实现通用接口,不需要了解对方。消息服务提供了标准接口。
3U$A~+~_l|-_5v051Testing软件测试网|/|5n1| LOD0s2、不直接通信。客户机不直接对话,而通过中间媒介,消息服务扮演 缓冲区,并提供 安全控制。
nFJ)sf)k_051Testing软件测试网q ]'M(A;c7wP8r5wz3、保证消息传递。 JMS的提供者保持消息持久,直到客户机接受为止。
)C/@+g K#vxb c0e-Xi| kr-p+tL4uj0 4、异步通信。51Testing软件测试网 tj8Z5x8i'R4OB){&JHP
~n'q d%I)[nX.f;T0 5、一对多、多对多和多对一通信。51Testing软件测试网2}4H9K WBu
51Testing软件测试网 n!s/_a{0LJMS(Java 消息服务)是一组标准的API,能够用于访问多种消息服务器。使用JMS,可以使用一样的API访问IBM的MQSeries、JBossMQ等消息服务。
$CW,Pt r!t051Testing软件测试网,EF2~Fs!B$Q0x/~JMS API中有很多核心概念是映射到底层的消息服务器。其中:51Testing软件测试网Vd uh,M@]cc?
h!cLca7[C{zw0 1、受控对象(Administered Object)。它们是由管理者创建的供JMS客户机使用的对象。如 连接工厂(Connection Factory),它们用于与底层的消息服务器和目标(队列和主题)进行连接(注:不太理解,可能错了)。管理通过JNDI对他们进行管理。JMS提供了 JMS客户机和实际JMS提供者之间的缓冲区。JBoss就是这些对象的管理者。51Testing软件测试网5|7U3Wc(wfpR3o4a
51Testing软件测试网iYlK vd&A2、JMS提供者。实现了JMS接口的消息服务器。(如 JBossMQ消息服务器)。
3n1F"DP-Wm;MX051Testing软件测试网5ay%m n5U5B,S k3、JMS客户机。消息的生产者和消费者。由于是对等的通信机制,所以没有客户机和服务器的概念。JMS既可以是消息创建者又是消息接收者。51Testing软件测试网 p*c l `,g
X@'\%vL'w0i)E0 4、消息(Message)。JMS客户机之间传送的一条条消息。
+}M NbT4iP0!c{)V4YK|a`ZTd0 传统的消息服务一般支持点对点通信和发布/订阅通信两种通信模式的一种。JMS API 两种都支持。51Testing软件测试网IG8E/pw!la:e{
51Testing软件测试网6~!w5mV&K]+?W E5RPoint-To-Point51Testing软件测试网+OB }Hk+R*L2od
-b%U[!L6q0 点对点通信模式,有一个中心队列作为发布的目标(受控对象)。一个或多个消息生产者可以发送消息到这个队列。然后被消息的消费者选取。51Testing软件测试网)Jj u!g7F}
&sK"O.bo{x3e&N{0 Pub/Sub
ozbYv~"h#q0Ax6i\/^c T5}0 发布/订阅通信模式是基于主题(Topic)概念的。主题是消息的发布目标(受控对象)。它和队列的不同就在于,可以有多个发送消息和接收消息的客户机,每个主题可以有多个发布者和多个订阅者。
\p p8[Ji8V7D-Ye0+s]SHNK0Uz__0 JMS API
gN4y(z1rhG.C ~051Testing软件测试网#NfII.M`Lf;C M;]l$SJMS API是在javax.jms包中定义的。要使用JMS API 需要创建一个提供连接对象的连接工厂。连接对象提供与消息服务器的链接。链接被用来创建会话,会话被用来创建消息,消息通过消息的生产者发送到目标(队列或主题),然后消息传递到消息消费者。
+?)|(h(zX/I051Testing软件测试网u%U'GYw ` JMS Parent51Testing软件测试网5T2v$}"j#[ P | `Y.Rh^+[p9uq0PTP Domain !P(E'z'P5G/G"e0 | 51Testing软件测试网w&U~Ae!Y? U/u)EJi,r Pub/Sub Domain51Testing软件测试网Rq*b|;]*[vh |
51Testing软件测试网x
pHU)fm ConnectionFactory51Testing软件测试网K"}$I'Uo5pq2f | 51Testing软件测试网
iM5s3K f QueueConnectionFactory S(T/_2}iZ/c{*f0 | AKY,g5`7pf f0y0TopicConnectionFactory51Testing软件测试网4_5]IgD d,r |
y$mVdEE|b+LP0Connection /H vU9j;G-C!h0 | 51Testing软件测试网 R'J2ERG7w QueueConnection51Testing软件测试网&L1O9OIL | 51Testing软件测试网M'h-R SM#Q$} TopicConnection 1j?0GQP^.`/u0 |
51Testing软件测试网;a?OS&}(Ur n3i Destination &[(YIt&b0 | 51Testing软件测试网s%{3lg? Queue51Testing软件测试网9t#YIZ&q7E7V | 51Testing软件测试网u!m0?
xT(p Topic51Testing软件测试网 W0dXH|;` T |
,l/un$Oy }iB%l0Session51Testing软件测试网US)] Jes | 51Testing软件测试网,?.kM {&b QueueSession {?5_2M`4ks0 | (@'trdXl*B:i5eaR0TopicSession {)r-eTt6J*c0 |
51Testing软件测试网O1n}6Xm'O Q MessageProducer d0G.TVDX;X6a Mf0 | Ai6w*W I B%z+S`0QueueSender {4ud-evQ3C!Z#gY5D0 | )^id$qb~_0TopicPublisher51Testing软件测试网!];s]2C6VZM#XOr'n |
8v#L8o@ajk0MessageConsumer )S%pxnD}0 | 51Testing软件测试网dp:b/N F$Z
t QueueReceiver 2RoqB-^*g0 | 51Testing软件测试网)Y#i#x2N{i TopicSubscriber Lh,f*M(brm#r ~C-P0 |
以下是对这些接口的简单描述:51Testing软件测试网 QXlth G
1、连接工厂(Connection Factory)51Testing软件测试网.gl#X|v0^
是客户机用来创建与JMD提供者的链接的对象。它是受控对象,可以通过JNDI查找。JMS API定义了两种类型的连接工厂。 QueueConnectionFactory 和 TopicConnectionFactory
BL&|5d1t1[0aZ$g1}q:I#e7g02、连接(Connection)
9_OUf1q;oK0连接对象是和JMS提供者通信的媒介。这个通信的具体实现依赖于JMS提供者。除了通用的借口,还有基于队列(QueueConnection)和基于主题(TopicConnection)专用接口。51Testing软件测试网H*CeMQ2`%{,M$\5o*O(|2Y*]
51Testing软件测试网1{is,mH3、会话(Session)
9l+ik3w lY8E;E051Testing软件测试网y'J6MI^用于创建消息的生产者、消费者和消息。它们都是单线程,能参加事务。有QueueSession和TopicSession。51Testing软件测试网,}K D.o(ni%n
51Testing软件测试网srDI(J7S4、消息(Message)
f;Y8H6I`,n-] v0:n,C6G.q1dzf$a0 消息是消息服务器在客户端之间发送的一条条信息。有五种接口,不同的类型消息。1. StreamMessage -- Java原始值的数据流 2. MapMessage--一组名/值对 3.TextMessage--一个字符串对象 4. ObjectMessage--一个序列化的 Java对象 5.BytesMessage--一个未解释字节的数据流。51Testing软件测试网7I4RW F zB
A2b?!y^+z$Q(y0 消息由以下几部分组成:51Testing软件测试网oG\"m%r ~B(QP
^:t Rl)j[(S-|z0 消息头(header):JMS消息头包含了许多字段,它们是消息发送后由JMS提供者或消息发送者产生,用来表示消息、设置优先权和失效时间等等,并且为消息确定路由。51Testing软件测试网N:I0Jt iz1\
51Testing软件测试网[:d(V9M'vn属性(property):由消息发送者产生,用来添加删除消息头以外的附加信息。
4T8R |#V#UB&H%gHc0|-Pq/[$aE0vT0 消息体(body):由消息发送者产生。51Testing软件测试网&S!}l)khT
51Testing软件测试网/XE!wQty(v5、目标(Destination)
~lAg0a0-\(_*FO[ ?%QYS&gz0 目标是受控对象。在JMS中表示一个队列或者一个主题。
zsY6yBW(mH0FZRrXi0 6、消息生产者(MessageProducer)51Testing软件测试网#E!~f|] r+v0v
51Testing软件测试网7Xt(V\Mo x+h是用于将消息发送到目标的对象,由会话对象创建,有QueueSender、TopicPublisher.
zGkR"t'?xN0