消息队列入门(三)JMS标准及实现

简介:

消息中间件

消息中间件即Message-oriented middleware(MOM),消息中间件利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成。
通过提供消息传递和消息排队模型,消息中间件可以在分布式环境下扩展进程间的通信。
消息中间件可以即支持同步方式,又支持异步方式。
异步中间件比同步中间件具有更强的容错性,在系统故障时可以保证消息的正常传输。异步中间件技术又分为两类:广播方式和发布/订阅方式。
消息中间件应用主要有两个优点:异步和解耦。

JMS规范标准

JMS即Java消息服务(Java Message Service),JMS是一个基于Java平台面向消息中间件(MOM)的API,用于在两个应用程序之间,
或分布式系统中发送消息,进行异步通信。
Java消息服务是一个与具体平台无关的API,绝大多数MOM提供商都对JMS提供支持。
JMS是类似于JDBC(Java Database Connectivity),并不局限于某个具体消息中间件,
JDBC 是可以用来访问许多不同关系数据库的 API,
而 JMS 则提供同样与中间件无关的访问方法,以访问消息收发服务。

>>JMS对象模型

ConnectionFactory:
连接工厂,JMS 用它创建连接Connection,一般设为单例模式,
一旦创建,就一直运行在应用容器内,客户端使用JNDI查找连接工厂,然后利用连接工厂创建一个JMS连接。

Connection:
JMS连接表示JMS客户端和服务器端之间的一个活动的连接,是由客户端通过调用连接工厂的方法建立的。

Session:
JMS会话表示JMS客户与JMS服务器之间的会话状态。JMS会话建立在JMS连接上,表示客户与服务器之间的一个会话线程。

Destination:
消息的目的,包括队列(PTP),主题(Pub/Sub)。

Message Producer和Message Consumer:
生产者和消费者对象由Session对象创建,用于发送和接收消息。

Message:
JMS 消息由以下几部分组成:消息头,属性,消息体。
消息头(header):JMS消息头包含了许多字段,它们是消息发送后由JMS提供者或消息发送者产生,用来表示消息、设置优先权和失效时间等等,并且为消息确定路由Routing。
属性(property):由消息发送者产生,用来添加删除消息头以外的附加信息。
消息体(body):由消息发送者产生,JMS中定义了5种消息体:ByteMessage、MapMessage、ObjectMessage、StreamMessage和TextMessage。

两种消息传递模型

(1)点对点模型(Point-to-Point)
点对点模型用于消息生产者和消息消费者之间点到点的通信。消息生产者将消息发动到由某个名字标识的特定消费者。这个名字实际上对应于消息服务中的一个队列(Queue),在消息传动给消费者之前它被存储在这个队列中。队列可以是持久的,以保证在消息服务出现故障时仍然能够传递消息。

(2)发布-订阅模型(Publish/Subscribe)
发布-订阅模型用称为主题(topic)的内容分层结构代替了PTP模型中的惟一目的地,
发送应用程序发布自己的消息,指出消息描述的是有关分层结构中的一个主题的信息。希望接收这些消息的应用程序订阅了这个主题。订阅包含子主题的分层结构中的主题的订阅者可以接收该主题和其子主题发表的所有消息



本文转自邴越博客园博客,原文链接:http://www.cnblogs.com/binyue/p/4738360.html,如需转载请自行联系原作者

相关实践学习
RocketMQ一站式入门使用
从源码编译、部署broker、部署namesrv,使用java客户端首发消息等一站式入门RocketMQ。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
2月前
|
消息中间件 存储 负载均衡
简单入门:消息队列的概念和应用
在复杂的系统架构中,组件间的通信是至关重要的问题。消息队列作为一种解决方案,能够使组件之间的通信更加高效、可靠。本文将从简单到复杂,逐步向您介绍消息队列的概念、使用场景以及如何实现。
95 3
|
3月前
|
消息中间件 存储 Kafka
MQ消息队列学习入门
MQ消息队列学习入门
77 0
|
11月前
|
消息中间件 RocketMQ
【消息队列】消息中间件RabbitMQ急速入门3
【消息队列】消息中间件RabbitMQ急速入门
|
11月前
|
消息中间件 API
【消息队列】消息中间件RabbitMQ急速入门2
【消息队列】消息中间件RabbitMQ急速入门
|
11月前
|
消息中间件 存储 Java
【消息队列】消息中间件RabbitMQ急速入门1
【消息队列】消息中间件RabbitMQ急速入门
|
11月前
|
消息中间件 存储 Java
【消息队列】消息中间件RocketMQ4.X急速入门3
【消息队列】消息中间件RocketMQ4.X急速入门
|
11月前
|
消息中间件 存储 SQL
【消息队列】消息中间件RocketMQ4.X急速入门2
【消息队列】消息中间件RocketMQ4.X急速入门
|
11月前
|
消息中间件 存储 Java
【消息队列】消息中间件RocketMQ4.X急速入门1
【消息队列】消息中间件RocketMQ4.X急速入门
|
11月前
|
消息中间件 存储 网络协议
RabbitMQ从入门到进阶(初始消息队列)
RabbitMQ从入门到进阶(初始消息队列)
206 0
|
11月前
|
消息中间件 存储 负载均衡
一篇搞定:消息队列概念、kafka入门、Kafka Golang客户端库
一篇搞定:消息队列概念、kafka入门、Kafka Golang客户端库
657 0