Java消息服务(Java Message Service)
Java消息服务简称JMS 是用于访问企业消息系统的开发商中立的API,企业消息系统可以协助应用软件通过网络进行消息交互
应用程序A与应用程序B 并没有代码关联
通过JBOSS JMS服务器 解耦
JMS中的消息:
消息传递系统的中心就是消息。一条Message由三个部分组成:
头(header)、属性(property)和主体(body)
消息有下面几种类型,他们都是继承自Message接口
StreamMessage:一种主体中包含Java基元值流的消息。其填充和读
取均按顺序进行
MapMessage:一种主体中包含一组名-值的消息。没有定义条目顺序
TextMessage:一种主体中包含Java字符串的消息(例如,XML信息)最常用
ObjectMessage:一种主体中包含序列化Java对象的消息
BytesMessage:一种主体中包含连续字节流的消息
消息的传递模型:
JMS支持两种消息传递模型:点对点(point-to-point,简称PTP)和发布/订阅(publish/subscribe,简称pub/sub)。这两种消息传递模型非常相似,但有以下区别:
PTP消息传递模型规定了一条消息只能传递给一个接收方。采用javax.jms.Queue表示
消息只传递给一个监听,谁先来,谁优先
Pub/sub消息传递模型允许一条消息传递给多个接收方。采用
javax.jms.Topic表示
这两种模型都通过扩展公用基类来实现。例如:javax.jms.Queue和
javax.jms.Topic都扩展自javax.jms.Destination类
配置目标地址:
开始JMS编程前,需要先配置消息到达的目标地址(Destination),
因为只有目标地址存在了,才能发送消息到这个地址。由于每个应
用服务器关于目标地址的配置方式都有所不同,下面以jboss为例,
配置一个queue类型的目标地址
<?xml version="1.0" encoding="UTF-8"?>
<server>
<!-- 目标地址的名称ejb3testQueue -->
<mbean code="org.jboss.mq.server.jmx.Queue"
name="jboss.mq.destination:service=Queue,name=ejb3testQueue">
<!-- 指定ejb3testQueue地址的JNDI名称 -->
<attribute name="JNDIName">queue/ejb3testQueue</attribute>
<depends optional-attribute-name="DestinationManager">
jboss.mq:service=DestinationManager
</depends>
</mbean>
</server>
jboss使用一个XML文件配置队列地址,文件的取名格式应遵守*-service.xml
当jboss遇到*-service.xml文件时,会把它当成服务去发布
这里取名为:ejb3testQueue-service.xml
<attribute name="JNDIName">属性指定了该目标地址的全局JNDI名称。如果不指定JNDIName属性,jboss会为它自动生成一个默认的全局JNDI,其名称由“queue”+“/”+目标地址名称组成。
另外在任何队列或主体被部署之前,应用服务器必须先部署Destination Manager Mbean,所以通过<depends>节点声明这一依赖。
在目标地址发布之前,先发布依赖服务(目标地址的管理器服务)
当目标地址编写好之后,进行发布,其过程和发布数据源、EJB一样
复制到当前配置项\deploy目录下
部署进jboss之后,控制台将输出信息,该JNDI名称
为:queue/ejb3testQueue
它前面没有java: 说明是全局JNDI名称,可以被外部访问
之后进入jboss管理后台jmx-console,找到jboss.mq.destination
栏目,找到刚才发布的目标地址,点进去后,可看到J绑定的NDIName属性名称
EJB中的资源,都是通过JNDI名称进行绑定的
-------------------------------------------------------
在java类中发送消息:
1.得到一个JNDI初始化上下文(Context)
InitialContext ctx = new InitialContext();
2.根据上下文查找一个连接工厂QueueConnectionFactory。该连接工厂是由JMS提供的,不需要自己
创建,每个厂商都为它绑定了一个全局JNDI,通过它的全局JNDI便可获取它:
QueueConnectionFactory factory = (QueueConnectionFactory)ctx.lookup
("QueueConnectionFactory");
3.从连接工厂得到一个连接QueueConnection
conn = factory.createQueueConnection();
4.通过连接来建立一个会话(Session):
session = conn.createQueueSession(false,QueueSession.AUTO_ACKNOWLEDGE);;
是否使用事务,消息接受的确认模式(使用默认自动)
5.查找目标地址:
例子对应代码:Destination destination = (Destination)ctx.lookup("ejb3testQueue");
返回是一个Queue的对象,这里用它的父类去引用它
6.根据会话以及目标地址来建立消息生产者(发送者)MessageProducer
(QueueSender和TopicPublisher都扩展自MessageProducer接口)
例子对应代码:MessageProducer producer = session.createProducer(destination);
传入代表要发送到的地址作为参数
TextMessage msg = session.createTextMessage("您好,这是我第一个消息驱动Bean");
producer.send(msg);
当发送消息之后,需要关闭会话、关闭连接
新建一个MessageDrivenBean的java Project项目,添加进所有EJBjar包
在src下建立java类QueueSender(com.jboss.app包),用于发送Queue
勾选main()
在类路径下添加jndi.properties文件
运行,发送消息(控制台上无输出)
打开jboss管理后台jmx-console,找到jboss目录下
service=JNDIView连接,找到里面的list()方法,Invoke
在全局命名空间下,查找到Queue的连接工厂的JNDI,就叫QueueConnectionFactory
分享到:
相关推荐
消息驱动Bean(Message Driven Bean,MDB)是Java EE(Enterprise Edition)平台中的一种特殊类型的Enterprise JavaBean(EJB),主要用于处理消息队列中的消息。MDBs是异步的,这意味着它们不会直接与客户端交互,...
**消息驱动Bean (Message Driven Bean, MDB) 是企业级JavaBeans (Enterprise JavaBeans, EJB) 3.0 规范中引入的一种组件模型,主要用于处理异步消息通信。在分布式应用程序中,MDB 提供了一种高效且解耦的方式来处理...
1. **EJB2.0消息驱动Bean(MDB)概念**: - MDB是无状态的组件,专门设计用于处理来自JMS队列或主题的消息。 - MDB通过监听JMS消息,自动启动,处理消息后结束,实现了异步处理。 2. **JBOSS 4.0.4.GA**: - 这...
在EJB中,消息驱动bean(Message-Driven Bean,MDB)是一种特殊类型的bean,它用于处理来自消息中间件(如JMS,Java Message Service)的消息。在这个“EJB消息驱动bean Demo”中,我们将深入探讨EJB MDB和JMS如何...
本讲将深入探讨EJB 3.0中的消息驱动Bean(Message Driven Bean,MDB),这是一种特殊类型的EJB,专门设计用于处理JMS(Java Message Service)消息。 消息驱动Bean的主要功能是异步接收和处理消息。这使得应用程序...
本篇主要关注Jboss服务器下的EJB开发,特别是消息驱动Bean(Message Driven Bean, MDB)的应用。消息驱动Bean是EJB的一种类型,它专门用于处理异步消息,通常是通过Java Message Service (JMS) API来实现的。 首先...
### EJB2与EJB3消息驱动Bean:深入解析与应用 #### 一、EJB2消息驱动Bean ##### 1. **理解消息驱动Bean(MDB)** 消息驱动Bean是Java EE中用于处理异步消息的一种特殊类型的EJB。在EJB2中,MDB主要用于接收来自消息...
1. **什么是消息驱动Bean(MDB)** - MDB是一种无状态的会话Bean,它通过JMS接口监听消息队列或主题,从而实现异步处理。 - MDB在接收到消息时,会自动调用其消息驱动的方法,无需客户端显式调用,提高了系统的可...
### Java EE 5 学习笔记06:EJB之消息驱动Bean总结 #### EJB 消息驱动 Bean (Message Driven Bean, MDB) 在Java EE 5中,消息驱动Bean(MDB)是一种特殊的EJB组件,它主要用于处理异步消息。MDB能够接收并处理由...
在JBoss这样的应用服务器中,EJB提供了三种主要的bean类型:实体Bean(Entity Bean)、会话Bean(Session Bean)和消息驱动Bean(Message-Driven Bean)。下面将详细探讨这三种bean的开发模式。 1. 实体Bean...
2. **实体Bean**:实体Bean是EJB的三大类型之一(另外两种是会话Bean和消息驱动Bean)。实体Bean通常用于表示数据库中的实体,它们有持久化状态,并且可以通过其唯一的键(主键)进行识别。在购物车应用中,可能包含...
注解驱动的开发** EJB 3.0引入了多种注解,如`@Stateless`, `@Stateful`, `@Singleton`, `@LocalBean`, `@Remote`等,使得开发者可以通过在类和方法上添加注解来声明Bean的行为和接口。 **5. 依赖注入** 依赖...
EJB分为三种主要类型:会话Bean(Session Beans)、实体Bean(Entity Beans)和消息驱动Bean(Message-driven Beans)。 二、会话Bean 会话Bean代表客户端的临时业务逻辑,它们不持久化数据,而是处理业务逻辑并...
EJB 3.0是EJB规范的一个重要版本,它引入了大量简化开发的特性,其中Message Driven Bean(MDB)是一种专门用于处理消息的组件,它简化了企业级应用中的异步处理。 Message Driven Bean 是一种无状态的session bean...
消息驱动Bean(Message-Driven Beans,简称MDB)是EJB中一种特殊类型的无状态会话Bean,用于处理异步消息。MDB能够接收来自Java消息服务(JMS)的消息,并对这些消息作出响应。在部署MDB时,可能会遇到一些问题,...
本文将围绕EJB3.0的三大核心组件——实体Bean(Entity Bean)、会话Bean(Session Bean)和消息驱动Bean(Message Driven Bean)进行详细介绍。 ### 1. 实体Bean(Entity Bean) 实体Bean是EJB3.0中的持久化组件,...
【EJB3.0 PPT】深入解析实体Bean与消息驱动Bean EJB(Enterprise JavaBeans)3.0是Java企业级应用开发的核心组件之一,主要用于构建可复用、可扩展且具有高度分布式特性的服务。本篇主要关注EJB3.0中的两个关键组件...
消息驱动Bean是Java EE平台上的一个特殊类型的Enterprise JavaBean (EJB),专门设计用来处理消息队列中的消息。MDB作为一个后台服务,监听特定的消息源,如JMS (Java Message Service) 队列或主题,当接收到消息时...
- **消息驱动Bean**:消息驱动Bean用于接收和处理JMS消息,通常与消息队列或主题交互,实现异步处理。 总的来说,Java EJB3通过减少XML配置、引入注解和简化API,降低了开发复杂性,提高了开发效率。在实际应用中...