ActiveMQ消息队列从入门到实践(1)—JMS的概念和JMS消息模型

1. 面向消息的中间件java

1.1 什么是MOM数据库

面向消息的中间件,Message Oriented Middleware,简称MOM,中文简称消息中间件,利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通讯来进行分布式系统的集成。编程

一个MOM系统,一般会包括客户端(Clients)、消息(Message)和 MOM,客户端是发送或者接受消息的应用程序,消息封装了要传递的内容,MOM能够存储和转发消息。以下图所示,系统A和系统B之间的消息传递,不是直接通讯,而是经过中间件来间接的传递。网络

image.png

1.2 MOM的好处异步

下降系统间通讯复杂度分布式

有了MOM,系统间的通讯,不用考虑系统是什么语言开发的,也不用考虑复杂的网络编程,各个系统只须要关心自身和MOM之间如何进行消息的接受和发送便可,这些操做经过简单的API就能够完成。ide

 

提升了消息的灵活性中间件

系统A经过MOM向系统B发送消息,消息能够存储在MOM中,并由MOM转发。即便是系统B不在线,MOM会持有这个消息,直到系统B链接并处理消息。对象

这就是说,系统A发完消息后,就能够执行其它操做,而没必要阻塞等待,尤为是对那些时间无关或者并行处理的操做,很是适用。blog

 

松散耦合

有了MOM的存在,对于系统B而言,只要发送的消息没有变化,就没必要考虑系统A的变化。A系统的代码改变,不会影响到B系统,反之亦然。

 

2. JMS概念

2.1 JMS是什么

Java消息服务(Java Message Service,JMS)应用程序接口是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通讯。Java消息服务是一个与具体平台无关的API,绝大多数MOM提供商都对JMS提供支持。

Java消息服务的规范包括两种消息模式,点对点和发布者/订阅者。Java消息服务支持同步和异步的消息处理。

 

一个JMS系统,一般包括了如下部分:

JMS Client,java语言编写的客户端,用于发送和接受消息。

Non-JMS Client,使用消息系统本地API编写的客户端,而不是使用JMS API。

Message,消息,被定义,用于在不一样的客户端之间交换。

JMS Provider,JMS提供商,是消息系统(好比ActiveMQ),固然,便可以支持JMS,也能够同时支持Non-JMS。

Administered Objects,被管理的对象,预置的JMS对象,为客户端使用。

 

2.3 JMS规范

JMS规范只是定义了接口,并无实现,规范全文见:JSR 914: JavaTM Message Service (JMS) API 。

 

3. JMS模型简介

3.1 JMS支持两种消息通讯模型:

点对点模型(Point to Point,P2P)

发布者/订阅者模型(publish/subscribe,  pub/sub)

image.png

P2P模型中,Sender把一个消息发送到Queue中,这个消息只能由一个客户端消费;一旦消息被消费,其它客户端就不能从这个Queue中获取到消息。巧克力糖盒子里只有一块糖,只有最早打开的那我的能吃到,后来的人就吃不到了。

Pub/Sub模型中,一个消息主题(Topic)被发布之后,能够有多个订阅者收听,这些订阅者均可以获取到消息;前提是,订阅者订阅了这个主题,而且只能接受订阅之后的消息。这就像生活里的期刊订阅,咱们只能收到订阅之后的期刊,以前的期刊,杂志社是不可能投递给咱们的。

 

3.2 点对点模型

只有一个消费者:每条消息只有一个消费者,若是这条消息被消费,那么其它消费者不能接受到此消息。

时间无关性:消息的消费和时间无关,只要消息被发送了,在消息过时以前,若是没有其余消费者消费了这个消息,那么客户端能够在任什么时候候来消费这条消息。

消费者必须确认:消费者收到消息以后,必须向Message Provider确认,不然会被认为消息没有被消费,仍然能够被其余消费者消费。能够设置自动确认。这个特色其实也是保证一条消息只能由一个消费者来消费。

 

非持久化的消息只发一次:非持久化的消息,可能会丢失,由于消息会过时,另外Message Provider可能宕机。

持久化的消息严格发一次:消息能够被持久化,好比持久化在文件系统或者数据库中,这样能够避免Message Provider的异常或者其它异常致使消息丢失。

 

3.3 发布者/订阅者模型

每条消息能够有多个订阅者,订阅者只能消费它们订阅topic以后的消息。

非持久化订阅,订阅者必须保持为活动状态才能使用这些消息,若是一个订阅者A断开了10分钟,那么A就会收不到这10分钟内的消息。持久化订阅,Message Provider会保存这些消息,即便订阅者由于网络缘由断开了,再从新链接之后,能让消费这些消息。是否使用持久化订阅,须要根据业务场景判断。

来源地址:https://blog.yoodb.com/yoodb/article/detail/1541

相关文章
相关标签/搜索