JMS消息服务器(一)——基础知识

1、概述

异构集成(heterogeneous integration)是消息传送机制在其中起关键作用的一个领域。无论它的成因是合并、并购、业务需求,或者仅仅是技术方向上的一个变化,越来越多的公司都正面临着在企业内部、跨企业集成异构系统和应用程序的问题。

消息传送机制还具有异步处理请求的能力,它为系统体系机构师和开发者提供的解决方案,能够减轻或消除系统瓶颈,并提高最终用户的生产率和系统的整体可伸缩性。由于消息传送机制能够实现组件之间的高度去耦,因此,使用这种机制的系统还具有高度的体系结构灵活性和敏捷性。

通过使用面向消息的中间件,消息通过网络从一个应用程序传送到另一个应用程序之中。企业中间件产品能够确保消息在应用程序中间的正确分发。此外,对于那些需要可靠地大量交换消息的企业,这些产品通常为它们提供了容错和负载均衡、可伸缩性和事务性的支持。

2、消息传送模型

MS支持两类消息传送模型:点对点模型发布/订阅模型。有称这些消息传送模型为消息传送域。点对点消息传送模型和发布/订阅消息传送模型经常分别缩写p2pPub/Sub

发布/订阅模型设计用于一对多(one-to-many)消息广播,而点对点模型则设计用于一对一(one-to-one)消息传送。如下图

2.1、点对点模型

点对点消息传送模型允许JMS客户端通过队列(queue)这个虚拟通道来同步和异步发送、接受消息。在点对点模型中,消息生产者称为发送者(Sender),而消息消费 者则称为接受者(receiver)。点对点消息传送模型的一个突出特点就是:发送到队列的消息被一个而且仅仅一个接受者所接受,即使可能由多个接受者在同一个队列中侦听统一消息是,也是如此。

点对点消息传送模型即支持异步“即发即弃(fire and forget)”消息传送方式,又支持同步请求/应答消息传送方式。点对点消息传送模型比发布/订阅型具有更强的耦合性,发送者通常会知道消息将被如何使用,而且也会知道谁将接受该消息

点对点模型支持负载均衡,它允许多个接受者侦听同一队列,并以此来分配负载。如图1-4所示,JMS提供者者负责管理队列,确保每条消息被组内下一个可用的接受者消费以此,而且仅仅一次

2.2、发布/订阅模型

在发布/订阅模型中,消息会被发布到一个名为主题的虚拟通道中。消息生产者称为发布者(publisher),而消息消费者称为订阅者(subscriber)。与点对点模型不同,使用发布/订阅模型发布到一个主题的消息,能够由多个订阅者所接受。有时候,也称这项技术为广播(broadcasting)消息每个订阅者都会接受到每条消息的一个副本。总地来说,发布/订阅消息传送模型基本上是一个基于(push)的模型,其中消息自动地消息者广播,他们无须请求或轮询主题来获得新消息。

发布/订阅模型的去耦能力要比p2p模型更强,消息发布者通常不会意识到有多少个订阅者或那些订阅者如何处理这些消息。

在发布/订阅消息传送模型内部,有多种不同类型的订阅者。非持久订阅者是临时订阅类型,它们只是在主动侦听主题时才接受消息。而另一方面,持久订阅者将接受到发布的每条消息的一个副本,即便在发布消息,它们处于“离线”状态时也是如此。

3、JMS API

JMS自身并不是一种消息传送系统;它是消息传送客户端和消息传送系统通信是所需接口和类的一个抽象。与JDBC抽象访问数据库、JNDI抽象访问命名和目录服务的方式一样,JMS抽象可以访问消息提供者。使用JMS,应用程序的消息传送客户端可以实现跨消息服务器产品的移植。

JMS API可以分为3个主要部分:公共API点对点API发布/订阅API。在JMS1.1中,公共API可被用于向一个队列或一个主题发布消息,或从其中接受消息。点对点API专门用于使用队列的消息传送,而发布/订阅API则专门用于使用主题的消息传送。

在JMS功能API内部,和发布和接受JMS消息有关的JMS API接口主要有7个:

  • ConnectionFactory
  • Destination
  • Connection
  • Session
  • Message
  • MessageProducer
  • MessageConsumer

在这些公共的接口中,ConnectionFactory和Destination必须使用JNDI从提供者处获得。其他接口则可以通过工厂方法在不同的API接口中创建。这7个主要的JMS公共API接口之间的关系如下图:

3.1、点对点 API

点对点消息传送模型API特指JMS API之内基于队列的接口。下面是用于向一个队列发送和从一个队列接受消息的接口:

*QueueConnectionFactory

* Queue

* QueueConnection

* QueueSession

* Message

* QueueSender

* QueueReceiver

与在JMS公共API中一样,QueueConnectionFactory和Queue对象必须通过JNDI从JMS提供者处获得。大多数接口名称仅仅是在公共API接口名称之前添加Queue一词而已。下图显示了基于队列的JMS API接口之间的流程和关系。

3.2、发布/订阅 API

发布/订阅消息传送模型内部使用的接口如下:

*TopicConnectionFactory

* Topic

* TopicConnection

* TopicSession

* Message

* TopicPublisher

* TopicSubscriber

下图是基于主题的JMS API接口的关系和流程:

4、企业消息传送模型

消息传送机制的一个基本思想就是:规定应用程序之间的同行应该采用异步方式。将各部分之间连接在一起的代码会假定这是一条单向消息,它不需要立即从另一个应用程序那里得到响应。一旦一条消息被发出,消息传送客户端就能够转向其他任务,他不必等待对这条消息的响应。这是RPC和异步消息传送之间的主要区别,而且,它对于理解消息传送系统的优点来说至关重要。

在一个异步消息传送系统当中,每个子系统都不存在和其他系统的耦合。下图是典型的架构:

时间: 2024-08-05 09:04:32

JMS消息服务器(一)——基础知识的相关文章

JMS消息服务器(二)——点对点消息传送模型

一.点对点模型概览 当你只需要将消息发布送给唯一的一个消息消费者是,就应该使用点对点模型.虽然可能或有多个消费者在队列中侦听统一消息,但是,只有一个且仅有一个消费者线程会接受到该消息. 在p2p模型中,生产者称为发送者,而消费者则称为接受者.点对点模型最重要的特性如下: 消息通过称为队列的一个虚拟通道来进行交换.队列是生产者发送消息的目的地和接受者消费消息的消息源. 每条消息通仅会传送给一个接受者.可能会有多个接受者在一个队列中侦听,但是每个队列中的消息只能被队列中的一个接受者消费. 消息存在先

JMS消息服务器——Message消息分析(1)

一.Message结构 Message消息是整个JMS规范最为重要的部分.一个JMS应用程序中的所有数据和事件都是使用消息进行通信的,同时JMS的其余部分也都在为消息传输服务.因此可以说,消息时一个系统的命脉所在. 一个Message对象有3个部分:消息头.消息属性,最后就是消息数据内容,它称为负载或消息体. 二.消息头 每条JMS消息都有一组标准的消息头.每个消息头都由一组取值函数和赋值函数所标识.这些方法名称紧随在术语setJMS**(),getJMS**()方法之后.如下图: JMS消息可

JMS消息服务器——Message消息分析(2)

3 消息类型 JAVA消息服务定义了6种JMS提供者必须支持的Message接口类型.尽管JMS定义了Message接口,但它并未定义它们的实现方式.这就允许提供者以它们自己的方式实现和传送消息,同时为JMS应用程序开发者维护了一个兼容的标准接口.这6个消息接口是Message和它的5个子接口:TextMessage.StreamMessage.MapMessage.ObjectMessage和ByteMessage. 3.1 Message 最简单的消息类型是javax.jms.Message

消息队列RabbitMQ基础知识详解

一: 什么是MQ? MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序或者模块对模块的通信方法.MQ是消费-生产者模型的一个典型的代表,一端往消息队列中不断写入消息,而另一端则可以读取队列中的消息. 常见的消息队列有RabbitMQ和kafka.下面详细介绍一下RabbitMQ的适用场景和基本概念. 二: 适用场景 2.1 并发处理 (1)串行方式:将注册信息写入数据库后,发送注册邮件,再发送注册短信,以上三个任务全部完成后才返回给客户端. 这有一个问题是,邮件,短

OpenStack消息队列AMQP基础知识

AMQP模型 AMQP中有几个重要的概念 Producer: 消息发送者. 负责创建消息, 填充消息内容(比如 routing key), 并发送消息到 Exchange Exchange: 从Producer接受消息, 根据Bindings中的配置, 把消息分派到对应的Queue中 Bindings:  描述了Exchange和Queue之间的关系. Exchange 根据消息内容 (routing key), 和Binding配置来决定把消息分派到哪个Queue中 Queue: 存储消息,

服务器的基础知识

运维与服务器:数据不能丢失,保证7*24小时运行(可靠性),提升用户的体验. 什么是服务器? 也称伺服器,是提供计算服务的设备.由于服务器需要响应服务请求,并进行处理,因此一般来说服务器应具备承担服务并且保障服务的能力. 服务器在网络环境下,根据提供的服务类型不同,一般分为文件服务器.数据库服务器.应用程序服务器.WEB服务器等. 如果按照服务器的外形分类,一般分成,机架式服务器,刀片式服务器,塔式服务器等. 服务器的计量单位U,有时也分为1U.2U.4U服务器.一般公司采购根据一个机架的大小,

IOS开发基础知识--碎片33

1:AFNetworking状态栏网络请求效果 直接在AppDelegate里面didFinishLaunchingWithOptions进行设置 [[AFNetworkActivityIndicatorManager sharedManager] setEnabled:YES]; 这样在有用AF请求的网络都会自动有效果:就不必在每个请求里单独写: 2:UIScrollView偏移64问题 在一个VC里如果第一个控件是UIScrollView,注意是第一个控件,就是首先addsubview在VC

RabbitMQ,Apache的ActiveMQ,阿里RocketMQ,Kafka,ZeroMQ,MetaMQ,Redis也可实现消息队列,RabbitMQ的应用场景以及基本原理介绍,RabbitMQ基础知识详解,RabbitMQ布曙

消息队列及常见消息队列介绍 2017-10-10 09:35操作系统/客户端/人脸识别 一.消息队列(MQ)概述 消息队列(Message Queue),是分布式系统中重要的组件,其通用的使用场景可以简单地描述为: 当不需要立即获得结果,但是并发量又需要进行控制的时候,差不多就是需要使用消息队列的时候. 消息队列主要解决了应用耦合.异步处理.流量削锋等问题. 当前使用较多的消息队列有RabbitMQ.RocketMQ.ActiveMQ.Kafka.ZeroMQ.MetaMq等,而部分数据库如Re

服务器架设笔记——Apache模块开发基础知识

通过上节的例子,我们发现Apache插件开发的一个门槛便是学习它自成体系的一套API.虽然Apache的官网上有对这些API的详细介绍,但是空拿着一些零散的说明书,是很难快速建立起一套可以运行的系统.(转载请指明出于breaksoftware的csdn博客) 为了实现最基础的URL解析等功能,我把<Apache模块开发指南>一书粗略了翻看了两遍,以利于迅速了解Apache模块编程的相关知识.至于书中具体的知识点,我并不在此赘述.但是为了便于大家了解之后遇到的各种相关的知识点,我大致罗列几条(摘