每章一篇博客带你拿下吉林大学JAVAEE期末(八)

JMS与消息驱动Bean

1.MDB简单介绍:

  • Message-driven Bean作为远程方法调用的一种替代方法,在客户端和服务器的直接方法调用之间放置了一个中间层,接收一个或多个客户端的消息,并将消息转发给一个或多个消息的使用者。它基于JMS消息,只能接收客户端发送的JMS消息然后处理。
  • MDB实际上是一个异步的无状态Session Bean,客户端调用MDB后无需等待,立刻返回,MDB将异步处理客户请求。这适合于需要异步处理请求的场合,比如订单处理,这样就能避免客户端长时间的等待一个方法调用直到返回结果。

2.JMS概述

  • JMS(Java Message Service,Java消息服务)是由Sun公司开发的一组接口和相关规范,这些接口和规范定义了JMS客户端访问消息系统的方法。
  • JMS为Java 程序提供了一种创建发送接收读取消息的通用方法。JMS可以为企业软件模块间提供方便、可靠的异步通信机制。

1)JMS消息结构

JMS 消息由以下几部分组成:消息头属性消息体

消息头:
  • JMSDestination:消息的目的地,Topic或者是Queue。
  • JMSDeliveryMode:消息的发送模式(persistent或nonpersistent)
  • JMSExpiration:表示一个消息的有效期。默认值是0,表示消息永不过期。
属性:

消息类型(TextMessage,MapMessage,BytesMessage,StreamMessage,ObjectMessage)

消息体:

字节流、输入输出流、可序列化对象等。

2)JMS消息传递模型

JMS消息系统支持两种消息传递模型:点对点(PTP)发布/订阅(Pub/Sub)

  • 点对点就是一对一,接收者在成功接收消息之后须向队列应答成功。
  • 发布订阅就是广播,但是你想接收消息就得订阅,订阅分为持久化订阅和非持久化订阅。持久化订阅消息消费者无需处于激活状态,而非持久化订阅必须。

3)JMS API模型

在这里插入图片描述

  • 连接工厂

为客户端创建一个连接的管理对象,由服务器管理员创建,并绑定到JNDI树上。客户端使用JNDI检索ConnectionFactory,然后利用它建立JMS连接

  • JMS连接

表示一个客户端到消息服务器间的连接通道,所有发送或接受的消息都要经过该通道。

  • JMS会话

JMS会话标识客户端和消息队列服务器间的一次会话过程

  • JMS消息生产者

JMS消息生产者通过Session向消息队列发送消息,负责将消息对象转变成消息队列能够处理的格式以及消息对象序列化

  • JMS消息消费者

JMS消息消费者通过Session从消息队列中获取消息,封装了对消息格式进行恢复的算法,如果消息的类型是一个复杂对象,则在消息获取的同时还需要对对象进行反序列化操作。

4)JMS消息发送

编程的步骤(八步):

  • 获得一个JBOSS上下文的引用
  • 通过JNDI查找获得连接工厂
  • 使用连接工厂创建一个连接
  • 使用连接创建一个会话
  • 通过JNDI查找Queue或者Topic
  • 使用会话和目的创建消息生产者
  • 使用会话创建一个需要发送的消息类型的实例
  • 发送消息
    由于JBoss对安全性的限制,为了使用户能够发送消息,必须为用户添加send权限

5)JMS消息接收

接收消息可以分为同步异步接收。

  • 同步接收使用MessageConsumer.receive() 方法实现,如果消息可用,JMS服务器将这个消息返回,否则接收者一直等待消息的到来。
  • 异步接收通过向MessageConsumer注册消息监听器对象javax.jms.MessageListener,实现队列中消息的异步接收,消息的处理在onMessage() 方法中实现。
    编程的步骤(七步):
  • 获得一个JBoss上下文的引用;
  • 通过JNDI查找获得连接工厂;
  • 使用连接工厂创建一个连接;
  • 使用连接创建一个会话;
  • 通过JNDI查找Queue或者Topic
  • 使用会话和目的创建消息的消费者;
  • 接收信息

3.MDB概述

  • 消息驱动Bean是一种通过消息方式为外界提供服务的组件,JMS是MDB支持的一种最基本消息类型,也是Java EE服务器必须提供的消息机制。
  • MDB组件只是提供一种基于消息服务请求模式,和具体业务逻辑无关。MDB从指定消息队列中接收消息,而对消息内容并不知情,当消息到达时,EJB服务器将指定消息发送到特定的MDB组件,消息内容要在MDB的onMessage() 方法中处理。具体的逻辑通常委托给其他EJB组件实现,而MDB只是提供一种基于消息的逻辑调用机制。

1)消息驱动Bean组成

  • 消息驱动Bean主要用来处理异步消息,客户端向容器发送一个JMS消息之后,不必等待消息驱动Bean处理完毕便可直接返回。消息被发送给由容器管理的JMS消息队列,容器在适当的时候通知消息驱动Bean的方法onMessage() 加以处理。
  • 一个MDB需要使用@MessageDriven标注,并实现javax.jms.MessageListener接口。
  • 当EJB服务器加载MDB组件时,首先检查组件所绑定的消息队列是否存在,如果存在,就将MDB组件和该队列相关联;如果不存在,就首先创建该队列然后再将其与MDB关联。
  • 基于Topic队列的MDB组件开发方法与基于Queue型队列的组件开发方法类似,但是基于Topic型队列的MDB组件需要配置subscriptionDurability属性。该属性值可以是DurableNonDurable,其中NonDurable是默认值,即如果某个时刻EJB服务器失去了和JMS消息服务器的连接,则MDB组件会丢掉该时刻所有的消息;反之,对于Durable型MDB组件,JMS服务会将消息进行保存然后再发给消息接收者,因此消息不会丢失
  • 基于Durable型的MDB组件必须设置clientID,它是设定MDB在消费Topic队列时使用的唯一身份标识,必须在队列服务器范围内唯一。而基于NonDurable类型的MDB可以不配置该属性,且开发方法与前面监听点对点的MDB开发方法相同。
  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
一、课程设计内容 根据开发组的兴趣和知识,在下面的几类网站中选择一个,作为自己的课程设计。或者是完全自主创意。 ※ 电子政务类的网站,如政府类网站; ※ 社交类网站,如天涯论坛(http://bbs.tianya.cn/)那样的网站; ※ 生活类网站,如点评网(http://www.dianping.com/)那样的网站; ※ 兴趣类网站,如摄影、旅游、读书网等内容的网站。 课程设计倡导创新和创意,具体类型和业务内容自定,题目自拟。对于有新意的题目和设计,在给定成绩时会给予加分。 二、开发环境要求: (一)项目要求使用B/S结构,利用Java EE开发平台,实现一个B/S结构的分布式系统,并实现系统的各项功能,包括数据录入、修改、查询,交易过程等。 (二)要求使用JSF作为页面开发手段,请勿使用JSP页面。 (三)开发工具建议使用NetBeans或者Eclipse。 (四)建议使用Mysql作为数据库服务器,也可以使用JavaDB等其他数据库类产品作为数据库服务器。 三、性能要求: 项目应该至少实现以下的要求: (一)界面要求:页面设计不必过于复杂,仅需实现一定程度的外观显示效果,要有比较好的用户交互功能页面,系统工作页面,内容展示页面。要求界面简洁美观、操作使用便利、提交响应迅速、功能实现流畅。 (二)功能要求:系统有关实现一定程度的功能,如系统登录功能,信息检索功能等。软件系统的设计架构和功能必须独立设计,杜绝抄袭。 (三)数据库要求:要有必要的信息数据库,能够实现对系统信息的存储、检索、修改等;必要时要有普通的用户信息数据库。 (四)工作量要求:课程设计应该达到一定的工作量,不能过于简单。 (五)网站运行所需要的其他功能,可选。 (六)开发组提出的具有创意的功能和页面内容,可选。 系统的内容可以到网络上适当下载,不必太多。 四、考核办法: 课程设计采用分组开发的方式,三人为一个设计小组,全班30人共计分成10个小组。 考核以小组为单位进行评价,针对每个小组的项目进行评分,小组的项目评分成绩即为小组各成员的课程开发设计成绩,根据个人在项目开发过程中的工作占比,在小组成绩基础上适当上下调整,最后确定成员的课程开发设计成绩。 最后一次课的14:00开始,答辩和演示程序,每个小组不超过10分钟。 答辩结束之后,各个小组需提交完整的项目代码和设计报告的电子版,同时提交设计报告的纸质版作为学院的课程考核凭证材料存档。 各个小组必须独立完成项目的开发设计工作,严禁抄袭。对于小组之间代码雷同率较高的,或者涉嫌抄袭的,有关小组的项目成绩都将以0分计。 五、评分标准: 完成项目设计的全部功能,达到项目的基本要求,可以得到90分;项目的设计或者页面设计有精彩发挥之处,酌情加分;未完成全部功能的,酌情减分。 六、设计报告: 请按照《〈Java EE企业级应用技术〉课程设计报告》的模板,由各个小组的组长认真填写。报告至少应该包括模板所列的各个部分,不能删减;可以根据设计开发过程,增添必要的部分。报告在打印时使用现有的格式,不要加封面。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

让AI服务于我

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值