浅谈JMS--(JMS 的简介)
在公司快两年了,也跟着团队做了几个项目;期间写过很多个接口,有使用webServices的,也有JMS的。之前的文章说过了webService的接口,这次想简单谈谈JMS,由于本身就属于中的菜鸟,有不好的地方;请手下留情勿拍砖!
1.jms的定义
jms 即(java message service)java 消息服务,是一组 Java 应用程序接口,用以提供创建、发送、接收、读取消息的服务。SUN 只提供接口,由不同的厂商根据该接口提供自己的实现。
2.JMS 的目标
更好地理解 JMS 有助于了解 JMS 规范的制定者设置的目标。现在,市场上有许多企业消息产品,生产这些产品的几家公司也参与了 JMS 的开发。
现有的这些系统的能力和功能各不相同。这些制定者知道如果 JMS 结合所有现有系统的所有功能,那么它会变得过于复杂。同样,他们相信,他们也不能让 JMS 只局限于所有系统共有的那些特性。
制定者相信,让 JMS 包括实现“高级的企业应用程序”所需要的所有功能是很重要的。
JMS 规范中声明, JMS 的目标是:
- 定义一组消息公用概念和实用工具。
- 最少化程序员使用消息时必须学习的概念。
- 最大化消息应用程序的可移植性。
- 最小化实现一个提供者所需的工作量。
- 为点对点和 pub/sub域 提供客户机接口。“域”是用于在前面讨论的消息模型的 JMS 术语。(注意:提供者不需要实现两个域。)
3.jms的模式
(1)点到点(point -to -point) ,
图中 clientA-->clientC,clientA-->clientD 就是 点到点 的模式; 其中clientA 就是 生产者,C和D就是消费者;
使用这种模型,客户端发送消息到队列目的地(Queue),从这个队列里面只有一个消息接收者可以收到那个消息,其他访问同一目的地的接收者不会接收到该消息
如clientC 从A那里消费了msg1 消息后,D就不能消费同样的消息了;所以clientD 消费Msg2。
点到点的模式主要特点就是:
① 每条消息只能有一个消费者(customer);一旦一条message被消费了之后,就不能被其他消费者接收。
②发送和接收消息和时间(时效)关系不大,但是要有一个前提就是:就是消息没有过期,没有被其他用户接收走
③ 消费者必须确认消费被接收,否则JMS服务提供者会认为该消息没有被接收,那么这条消息仍然可以被其他人接收。程序可以自动进行确认,不需要人工干预。
④非持久的消息最多只发送一次
⑤持久的消息严格发送一次
我们可以将比较重要的消息设置为持久化的消息,持久化后的消息不会因为JMS服务提供者的故障或者其他原因造成消息丢失。
(2)topic(pub/sub) 发布订阅模型
关于这个模型,可能比较熟悉;因为之前在写redis的高级应用的文章中有提过这个。如图中的clientB --》clientE 和clientF 就是这个,就发布者发布的消息,可以
同时被多个订阅者接收。
发布/订阅模型的特点:
①每个消息都可以有多个(0,1,……)订阅者
②订阅者只能消费他们订阅之后出版的消息
这就要求订阅者必须先订阅,生产者再发布。即订阅者必须先运行,再等待生产者的运行,这和点对点类型有所差异。
③订阅者必须保持为活动状态才能使用这些消息
即订阅者必须保持活动状态等待发布者发布的消息,如果订阅者在发布者发布消息之后才运行,则不能获得先前发布者发布的消息。
4.JMS的消息中间件
说到这里要先解释一下MOM?
面向消息中间件(mom)为分布式应用 系统开发提供异步,解耦,稳定,可扩展和安全的行为。mom在分布式计算领域是一个重要的概念。它允许应用
开发使用代理器api在分布式应用 环境实现各种功能。总之,mom的设计原理就是作为消息发送者和接收者的中间人使用。这个中间人提供了一个高级别的解耦。
而且由于jms是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。Java消息服务是
一个与具体平台无关的API,绝大多数MOM提供商都对JMS提供支持。接下来就介绍下这几种mom:
1).IBM MQ 系列产品提供的服务使得应用程序可以使用消息队列进行交流,通过一系列基于 Java 的 API 提供了 MQseries 在 Java 中应用开发的方法。它支持点到点和发布/订阅两种消息模式。
2).WebLogic是BEA公司实现的基于工业标准的J2EE应用服务器,支持大多数企业级JavaAPI,它完全兼容 JMS 规范,支持点到点和发布/订阅消息模式,它支持消息的多点广播、持久消息存储的文件和数据库、XML 消息,以及动态创建持久队列和主题。
3).JBoss 是 JBoss 公司开发的一个免费开源的应用服务器,它提供了 EJB 运行的环境,并能够结合 EJB 进行 JMS 消息的收取,支持点到点模型和发布/订阅模型。
4).ActiveMQ 是一个基于 Apache 2.0 Licenced 发布的开放源代码的 JMS 产品,它能够提供点到点消息模式和发布/订阅消息模式,支持 JBoss、Geronimo 等开源应用服务器,支持 Spring 框架的消息驱动,新增了一个 P2P 传输层,可以用于创建可靠的 P2P JMS 网络连接,拥有消息持久化、事务、集群支持等 JMS 基础设施服务。
5).OpenJMS 是一个开源的 JMS 规范的实现,它支持点对点模型和发布/订阅模型,支持同步与异步消息发送、可视化管理界面,支持 Applet,能够与 Jakarta Tomcat 这样的 Servlet容器结合,支持 RMI、TCP、HTTP 与 SSL 协议。
我之前参与几个项目中就用到IBM WebSphere MQ,以及activemq ;当然这些都是后话了。
5.jms 的接口
jms的接口如图中所示,(以及jms的两种模式继承的接口):
JMS Parent |
PTP Domain |
Pub/Sub Domain |
ConnectionFactory |
QueueConnectionFactory |
TopicConnectionFactory |
Connection |
QueueConnection |
TopicConnection |
Destination |
Queue |
Topic |
Session |
QueueSession |
TopicSession |
MessageProducer |
QueueSender |
TopicPublisher |
MessageConsumer |
QueueReceiver |
TopicSubscriber |
jms接口的描述:
ConnectionFactory:连接工厂,JMS用它创建连接
Connection:JMS 客户端到JMS Provider 的连接
Destination:消息的目的地
Session:一个发送或接收消息的线程
MessageProducer: (message的生产者)由Session对象创建的用来发送消息的对象
MessageConsumer: (message的消费者)由Session对象创建的用来接收消息的对象
6.jms的消息
jms的消息由三模块组成的: header(消息头)、属性、和body(消息实体)
消息头:主要是设置消息的失效时间、提供发送和接收识别标识、消息路由等 :如header.setJMSMeassageId();
属性:由消息发送者产生,用来添加删除消息头以外的附加信息。 名称没有限制,用户可随便定义;分三类:应用程序定义属性、JMS定义属性、提供者自定义属性
消息实体: 发送到接收应用程序的内容。每一个消息接口都专用于它所支持的内容类型。JMS中定义了5种消息体:ByteMessage、MapMessage、ObjectMessage、StreamMessage和 TextMessage。
7.jms开发编程实现
一个完整的jms 开发流程:
(1).通过 JNDI 查询 ConnectionFactory
。
(2).通过 JNDI 查询一个或者多个 Destination
。
(3).用 ConnectionFactory
创建一个Connection
。
(4).用 Connection
创建一个或者多个Session
。
(5)用 Session
和 Destination
创建所需要的 MessageProducer
和MessageConsumer
。
(6)启动 Connection
。
浅谈JMS--(JMS 的简介)相关推荐
- 运行catia_浅谈CATIA开发——CAA简介
一.背景 CATIA是当今工业领域内领先的三维CAD软件,通过对CATIA的二次开发,可以对特定功能和需要进行定制,并且无缝嵌入到CAITA中. 二.二次开发框架 CATIA提供了Automation ...
- 浅谈Android Architecture Components
浅谈Android Architecture Components 浅谈Android Architecture Components 简介 Android Architecture Componen ...
- 浅谈 TLS 1.3
本文主要从TLS 1.3的优势.部署和时间发展线介绍了这种用于为计算机网络通信提供安全性的密码协议TLS. 上篇文章回顾:浅谈DHCP协议 TLS简介 按照维基百科的定义,TLS 是一种用于为计算机网 ...
- [原]浅谈几种服务器端模型——反应堆模式(epoll 简介) - _Boz - 博客园
[原]浅谈几种服务器端模型--反应堆模式(epoll 简介) - _Boz - 博客园 [原]浅谈几种服务器端模型--反应堆模式(epoll 简介) 引言:上一篇说到了线程池方式来处理服务器端的并发, ...
- 浅谈TCP/IP协议栈(三)路由器简介
读完这个系列的第一篇浅谈TCP/IP协议栈(一)入门知识和第二篇浅谈TCP/IP协议栈(二)IP地址,在第一篇中,可能我对协议栈中这个栈的解释有问题,栈在数据结构中是一种先进后出的常见结构,而在整个T ...
- 浅谈消息队列及常见的分布式消息队列中间件
背景 分布式消息队列中间件是是大型分布式系统不可缺少的中间件,通过消息队列,应用程序可以在不知道彼此位置的情况下独立处理消息,或者在处理消息前不需要等待接收此消息.所以消息队列主要解决应用耦合.异步消 ...
- 浅谈 Java Printing
浅谈 Java Printing 其实怎么说呢?在写这篇博文之前,我对java printing 可以说是一无所知的.以至于我在敲文字时, 基本上是看着api文档翻译过来的.这虽然看起来非常的吃力, ...
- 物流运输系统设计浅谈
本文为PMCAFF专栏作者 钟翼翔 于社区发布 随着物流行业的快速发展,作为支撑物流数字化管理.信息化运作的各类系统平台也正层出叠见.运输作为物流作业中费用占比最高的环节之一,其系统竞争也格外激烈,这 ...
- 浅谈SQL Server 对于内存的管理
简介 理解SQL Server对于内存的管理是对于SQL Server问题处理和性能调优的基本,本篇文章讲述SQL Server对于内存管理的内存原理. 二级存储(secondary storage) ...
- 酒店前厅计算机的作用,浅谈智能化对酒店前厅员工的服务质量和影响
摘 要:随着信息技术.网络技术等的广泛应用,社会智能化表现越来越突出.从智能化的具体发展和应用分析来看,其不仅改变了人们的生活方式,使的人们的生活更加的便捷,同时也对行业发发展等产生了非常显著的影响. ...
最新文章
- 【公开课预告】AutoML知多少
- mysql php教程,MySQL PHP语法
- 读《程序员的SQL金典》[2]--函数
- nginx下Thinkphp 隐藏index.php
- 工作流系统之三十四 集成用户系统
- 每周分享第 37 期
- 图像质量评价 开源项目汇总
- linux如何在网页播放视频,Linux_网页媒体播放器代码详解,老式的播放器,新式播放器是在 - phpStudy...
- Scrapy添加headers
- 企业微信sdk调用流程
- 【论文翻译】:(arxiv 2022)PS-NeRV: Patch-wise Stylized Neural Representations for Videos
- Linux software RAID 1 - root filesystem becomes read-only after a fault on one disk
- 最短哈密顿路matlab,最短路径系列【最短路径、哈密顿路等】
- 【报告分享】代餐行业营销洞察报告-丁香医生(附下载)
- 【高自旋和低自旋配合物】
- 让我在这枯燥的实验室机房里,告诉你们什么是嵌入式软件开发
- 微信小程序开发之——用户登录-搭建开发者服务器(2)
- 华为鸿蒙系统怎么安装软件,华为鸿蒙系统2.0怎么进行安装?鸿蒙系统2.0安装步骤一览...
- Activity标签设置
- 史上绝地反击,美式英语英文学习大全。美国英语最新词频表
热门文章
- 吉林大学计算机专业,考生吉林大学计算机专业,心里闷闷不乐怎么办?
- 前端-表格英文单词不换行问题
- QQ小程序支付 QQ钱包支付 微信支付
- 嵌入式工程师“中年危机”应对策略上
- 基于selenium+scrapy爬取复仇者联盟4豆瓣影评数据
- Linux(十二)中断系统
- 能不能用计算机代替plc,把电脑当作PLC设备使用可以吗
- [Swift]LeetCode1104. 二叉树寻路 | Path In Zigzag Labelled Binary Tree
- 支付宝小程序模板开发,一整套流程
- 基于听觉特性的Mel频率倒谱分析