JMS基础学习总结

最近学习了JMS,在这里做一个大概的基础知识点梳理。

总体结构

JMS主要有JMSClient和JMSServer两部分参与,JMSClient将消息发送到JMSServer,JMSServer再将该消息发送给关注该消息的JMSClient.


这其中首先设计到消息的接收方式,分两种,一种为同步接收,一种为异步接收。同步接收即阻塞模式,异步接收采用事件模式。

其次是消息的发送方式,一种是点对点的p2p,采用消息队列,一种是发布订阅方式,采用Topic.

1. 发送/接收消息:

首先,客户端要与服务端JMSProvier建立JMSConnection,因为J2EE对此做了封装,采用工厂模式,所以建立连接使用connectionFactory.然后连接工厂建立connection.

连接建立以后,接下来就是发送和接收消息了。首先是消息的发送方,第一个要解决的问题是发送到哪里,即消息发送的目的地(destination),这是一个发送方和接收方约定的目的地,发送方将消息发送到这里,接收方接收这里的消息。如何发送,j2ee将这个过程进行了封装,发送方只需要使用JMSProducer来发送消息到指定的destination.(关于JMSProducer如何产生的,不做详细介绍,简要就是调用连接(connection)创建的会话(session)进行创建或者使用连接工厂创建的JMXContext(封装了connection和session)来创建)。接收方如何接收,这里同样的是使用JMSConsumer来同步接收或者异步接收某个目的地的消息(JMSConsumer的创建于JMSProducer类似)。

2. 消息

消息具有约定的统一格式,包含消息头,消息属性和消息体三部分。对于一个消息,只有消息头是必须的。

对于这三部分的具体介绍参看jdk

消息类型:

j2ee目前(1.7)共有6中封装的消息类型,TextMessage,MapMessage,BytesMessage,StreamMessage,ObjectMessage,Message.根据需要选择适合自己的消息类型来使用。

3.消息的订阅方式

其实,在JMSConsumer订阅消息的时候,与JMSProvider之间制定了一个隐式的订阅协议(subscription).

该订阅方式主要有两种限定,一种是是否为共享的(shared),另一种为是否为长期的(durable).两种方式可是组合,就有了4中模式,即不共享非长期的(unshared nondurable),不共享长期的(unshareddurable),共享的非长期的(sharednondurable),共享的长期的(shareddurable).

共享对于一个topic,当然可以有多个客户端产生多个订阅(subscription),这没有问题,但是对于一个订阅,接收的消息就只能分发给一个consumer.所以这里的共享就是解决多个consumer对于消息的共享问题。创建一个共享的订阅,指定其topic及共享的订阅的名称,那么使用这个共享的订阅的多个consumer可以共享这个消息。

长期:通常,对于一个订阅的消息,在分发时候如果其订阅存在,那个该接受者(consumer)就能够接收到该消息,否则将无法得到,产生了消息丢失;这里长期(durable)协议就是解决消息丢失的问题,即在消息分发的时候消息接收者不存在,当其再次上线的时候依然能够得到该消息,除非它放弃对了该消息的订阅。

4. 消息过滤

消息接受者虽然关注某一个主题的消息,但是并非该主题的所有消息都关注,因此在添加订阅(subscription)的时候,可以添加一个过滤器(selector),对消息做初步的过滤。消息过滤器只能过滤消息header和消息属性。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值