Ejb in action(七)——message与JMS

在我们展开对MDBs的学习之前,我们需要了解message(消息)与JMS(Java Message Service)的概念。我们在Java EE中谈论消息,实际上就是意味着实现一个松耦合的过程,系统组件之间的异步通信。

在开发中,许多组件之间的调用都是同步的,像简单的方法调用、Java的RMI等。而此处的异步调用区别于此。在很多时候,使用异步消息能够提高用户体验。

拿CSDN的注册功能来举例:用户点击注册之后,这时客户端向服务器发送一个请求,服务器进行处理后,将注册成功的提示消息返回给客户,同时,向用户的邮箱发送了一封邮件。是不是等邮件发送成功、用户收到邮件之后,再向用户显示注册成功呢?

当然不会这样,因为用户体验将会很差。所以将结果直接返回给用户,将用户注册的信息通过消息发送给后端程序慢慢处理。

消息

消息是JMS的核心概念,JMS客户端和JMS服务提供者通过消息来进行通信。

企业消息不是一种新的概念,和消息相关的产品已经有多年的历史,比如IBM MQSeries,Microsoft的MSMQ,JBoss MQ 和 Apache的 ActiveMQ等。企业消息系统使用松耦合的方式集成应用程序,在存储和转发的基础上支持应用程序间数据的异步传递;各种应用程序只要和消息服务器(消息中间件,MOM)打交道就可以实现相互通信。

使用消息系统有一下优点:

1、平台无关性;

2、和网络位置无关;

3、在不同类型的网络环境下互操作性良好;

4、具有良好的扩展性和良好的伸缩性。

JMS

JMS(Java Message Service) 即Java消息服务。它提供标准的产生、发送、接收消息的接口,简化企业应用的开发。JMS是一种企业消息传送的API,并不是MOM消息中间件系统的全部,JMS也是一种规范,类似于JDBC,我们通JMS API访问 JMS的服务器。

大致由三部分组成:1、消息发送端;2、中间件服务器;3、消息接收端三个组件。

Java消息服务器是指,将数据通过消息作为载体在网络中从一个系统异步传送给另一个系统。这样的异步消息传送意味着:发送者不需要等待接收者接收或处理该消息;它可以自由地发送消息并持续进行处理。这样一个异步式的架构主要依赖于一台消息服务器(message server)。消息服务器,也称为消息路由器(message router)或代理(broker),它负责从一个消息传送客户端向其他消息传送客户端传送消息。

JMS支持两种消息通信模型,分别是著名的点到点(point-to-point)(P2P)模型和著名的发布/订阅(Pub/Sub)模型。

P2P与Pub/Sub的简单对比:

P2P 模型规定了一个消息只能有一个接收者;

Pub/Sub 模型允许一个消息可以有多个接收者。

对于点到点模型,消息生产者产生一个消息后,把这个消息发送到一个Queue(队列)中,然后消息接收者再从这个Queue中读取,一旦这个消息被一个接收者读取之后,它就在这个Queue中消失了,所以一个消息只能被一个接收者消费。

与点到点模型不同,发布/订阅模型中,消息生产者产生一个消息后,把这个消息发送到一个Topic中,这个Topic可以同时有多个接收者在监听,当一个消息到达这个Topic之后,所有消息接收者都会收到这个消息。

关于点到点模型与发布/订阅模型的具体内容,我会安排在下一篇文章中进行介绍。

Ejb in action(七)——message与JMS,布布扣,bubuko.com

时间: 2024-11-05 12:37:06

Ejb in action(七)——message与JMS的相关文章

Ejb in action(五)——会话Bean的生命周期

会话Bean与消息驱动Bean.实体Bean的最重要的区别在于生命周期的差异性.会话Bean实例存活期较短,它和线程类似,包括对象的创建.初始化.运行.钝化.激活.销毁. 生命周期的概念,了解生物学的童鞋一定对这个概念不陌生.这里所谓的生命周期,就是指EjbBean实例存在的各个阶段中,提供的一些注解方法.在运行时,Ejb容器会动态调用这些方法. 关于会话Bean的生命周期,Ejb3.0中一共提供了6个注解方法,这些方法都适合有状态会话Bean,而只有@postConstruct和@PreDes

Ejb in action(六)——拦截器

Ejb拦截器可以监听程序中的一个或所有方法.与Struts2中拦截器同名,而且他们都能够实现切面式服务.同时也与Spring中的AOP技术类似. 不同的是struts2的拦截器的实现原理是一层一层的拦截器包住一个action,拦截Action请求,在自己的拦截器里面自定义内容. Struts2中的拦截器可以说是个过滤器,把不想要或不想显示的内容过滤掉.拦截器可以抽象出一部分代码用来完善原来的Action,同时可以减轻代码冗余,提高重用率.如一些登录验证.权限限制等. Spring的两大主要功能就

Ejb in action(四)——购物车实例演示有状态会话Bean

前面.我们介绍了一个入门实例.事实上那就是无状态回话Bean的经常使用情况. 上一篇文章中.我们介绍了无状态会话Bean和有状态会话Bean的相关概念.为了加深大家对它们的理解,我们一起来实现一个有状态会话Bean的样例--模拟购物车. 这个样例很经典:一个client购物的过程中.服务端会创建一个SessionBean保存着这一client的状态.client买的东西,都会在服务端进行存储. 也就是说.自始至终,一直存在一个有状态会话Bean对象.与该client进行交互. 以下来看详细实现:

EJB学习笔记七(依赖注入)

1.前言 在EJB中也为我们提供了依赖注入的功能,关于什么是依赖注入,在此就不再多分析了. 2.EJB注入 在EJB中注入一般使用的就是@EJB或者@EJBS,两者的区别莫过于注入的类可以实现多个接口.下面来看一下@EJB用到的属性. beanInterface:该属性指定被注入EJB所实现的接口 name:该属性用于指定被注入Bean在JNDI ENC中注册项名称,该名称在不同应用服务器中可能存在差异. beanName:该属性指定被注入EJB的名称,其值与被注入Bean中@StateLess

Ejb in action(一)——开篇介绍

从今天開始.我们共同来学习JavaEE中一个很重要的规范:Ejb. 既然您已经找到了这篇文章.就说明您至少已经对分布式开发有个大体上的概念了.之前没了解过也没关系.正好通过咱们的共同学习,一起来了解它以及深入地学习它. 首先.我们来看一些Ejb的总括图: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGl1NzY1MDIzMDUx/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gra

Ejb in action(二)——实例入门

在上一篇文章当中,我们介绍了Ejb的相关概念.再展开后文介绍之前,我先给大家提供一个Ejb实例,加深印象. 开发环境:eclipse 应用服务器:jboss 1.服务端程序 在Eclipse中创建一个Ejb项目:EjbTest 添加接口IHelloWorld package com.ejb; public interface IHelloWorld { public String sayHello(String world); } 添加实现类HelloWorld 此处声明为Ejb无状态bean,

【转】深入浅出JMS(一)--JMS基本概念

摘要 The Java Message Service (JMS) API is a messaging standard that allows application components based on the java Platform Enterprise Edition (Java EE) to create, send, receive, and read messages. It enables distributed communication that is loosely

深入浅出JMS(一)--JMS基本概念

摘要:The Java Message Service (JMS) API is a messaging standard that allows application components based on the Java Platform Enterprise Edition (Java EE) to create, send, receive, and read messages. It enables distributed communication that is loosely

【进阶EJB】深入探讨三种Bean(三)——MessageDriven Bean

通过前两篇文文章 [进阶EJB]深入探讨三种Bean(一)--Session Bean [进阶EJB]深入探讨三种Bean(二)--Entity Bean 已经介绍了前两种Bean,今天我们继续介绍第三种Bean--MessageDriven Bean. 要说MessageDriven Bean前就先要介绍一下JMS(Java Message Service),JMS是Java消息服务,它是一个与具体平台无关的API(Application Program Interface 应用程序接口),是