1、什么是消息中间件?
  关注于数据的发送和接受,利用高效可靠的异步消息传递机制集成分布式系统。

2、什么是JMS?
  Java消息服务(java Message Service)即JMS,是一个java平台中关于面向消息中间件的API,用于在两个应用程序之间或者分布式系统中发送消息,进行异步通信。

3、什么是AMQP?
  AMQP(即advanced message queuing protocol)是一个提供统一消息服务的应用层标准高级消息队列协议,基于此协议的客户端与消息中间件可以传递消息,并不受客户端/中间件不同产品,不同开发语言等条件的限制。

4、关于JMS与AMQP的对比如下所示:

5、JMS规范,JMS相关概念。

 a、提供者,实现JMS规范的消息中间件服务器。
b、客户端,发送或者接受消息的应用程序。
c、生产者/发布者,创建并发送消息的客户端。
d、消费者/订阅者,接受并处理消息的客户端。
e、消息,应用程序之间传递的数据内容。
f、消息模式,在客户端之间传递消息的方式,JMS中定义了主题和队列两种模式。

6、JMS消息模式(队列模型,主题模型)。

1)、队列模型。

 a、客户端包括生产者和消费者。
b、队列中的消息只能被一个消费者消费。
c、消费者可以随时消费队列中的消息。

队列模型的示意图(出自慕课网):

2)、主题模式。

 a、客户端包括发布者和订阅者。
b、主题中的消息被所有订阅者消费。
c、消费者不能消费订阅之前就发送到主题中的消息。

主题模型的示意图(出自慕课网):

注意,先订阅,再消费哦!

7、JMS的编码接口:

 JMS的编码接口
a、ConnectionFactory用于创建连接到消息中间件的连接工厂。
b、Connection代表了应用程序和消息服务器之间的通信链路。
c、Destination指消息发布和接受的地点,包括队列和主题。
d、Session表示了一个单线程的上下文,用于发送和接受消息。
e、MessageConsumer由会话创建,用于接受发送到目标的消息。
f、MessageProducer由会话创建,用于发送消息到目标。
g、Message是在消费者和生产者之间传送的对象,消息头,一组消息属性,一个消息体。

8、JMS编码接口之间的关系(出自慕课网)。

流程如下所示:
  ConnectionFactory创建一个Connection连接,然后可以由Connection连接创建一个会话(或者创建多个会话,每个会话都是在一个线程上下文的,即session会话是单线程的,只在当前的上下文有效,所以会话可以做一些事务方面的处理,连接可以供多个线程使用的)。session会话可以创建MessageConsumer生产者,MessageProducer消费者。会话也可以用来创建一个Message消息的,然后MessageConsumer生产者将创建的消息发送到Destination目的地,MessageProducer消费者从指定的目的地接受到消息。

9、Spring与ActiveMq集成的操作(Spring与JMS集成的操作)。使用Spring集成jms连接ActiveMQ。

a、ConnectionFactory用于管理连接的连接工厂,此处是由Spring提供的。
    一个Spring为我们提供的连接池ConnectionFactory,JmsTemplate每次发送消息都会重新创建连接,会话和producer,非常损耗性能。所以需要使用ConnectionFactory连接池。Spring提供了两种连接池,分别是SingleConnectionFactory(返回同一个ConnectionFactory)和CachingConnectionFactory(继承SingleConnectionFactory,新增了缓存功能)。

b、JmsTemplate用于发送和接受消息的模板类。
    是Spring提供的,只需要向Spring容器中注册这个类就可以使用JmsTemplate方便的操作JMS。JmsTemplate类线程安全的,可以在整个应用范围内使用。

c、MessageListerner消息监听器。
    实现一个onMessage方法,该方法只接受一个Message参数即可对消息进行处理了。

待续......

Jms规范学习的更多相关文章

  1. MQ学习(一)----JMS规范(转发整合)

    最近进行ActiveMQ的学习,总结下已被不时之需. JMS规范: JMS即Java消息服务(Java Message Service)应用程序接口是一个Java平台中关于面向消息中间件(MOM)的A ...

  2. 消息中间件系列一:入门、JMS规范、ActiveMQ使用

    一.入门 1. 消息中间件的定义 没有标准定义,一般认为,采用消息传送机制/消息队列 的中间件技术,进行数据交流,用在分布式系统的集成 2. 为什么要用消息中间件 解决分布式系统之间消息的传递.电商场 ...

  3. JAVA消息服务JMS规范及原理详解

    JAVA消息服务JMS规范及原理详解 一.简介 JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应 ...

  4. JMS规范与Kafka

    一.为什么需要消息队列 消息队列的核心作用就是三点:解耦一个系统中各个子模块的互相绑定与依赖,异步执行后台耗时逻辑,并行处理一个请求中涉及的多个操作. 以我们常见的下订单场景来说明,我们熟悉的淘宝,后 ...

  5. 实现JMS规范的ActiveMQ

    ActiveMQ是Apache软件基金会的开源产品,支持AMQP协议.MQTT协议(和XMPP协议作用类似).Openwire协议和Stomp协议等多种消息协议.并且ActiveMQ完整支持JMS A ...

  6. JMS规范简介

    一.JMS规范 Java消息服务定义: Java消息服务(Java Message Service)即JMS,是一个Java平台中面向消息中间件的API,用于在两个应用程序之间或分布式系统中发送/接受 ...

  7. JMS API学习总结(一)

    三.JMS API简析 顶级接口 P2P Pub/sub 备注 ConnectionFactory QueueConnectionFactory TopicConnectionFactory 基于工厂 ...

  8. 公司C++规范学习

    目录 公司C++规范学习 语法部分 风格/约定 公司C++规范学习 语法部分 class和struct关键字的选择:class表示被封装的用户自定义类型,不公开定义非静态数据成员,struct表示数据 ...

  9. ActiveMQ 笔记(三)JMS规范和落地产品、小知识Broker

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 一.JMS规范概述 1.JavaEE 概述及主要核心规范 JavaEE是一套使用Java进行企业级应用开 ...

随机推荐

  1. 在.net 程序中使用Mustache模板字符串

    今天弄了一个配置随着使用环境动态切换的功能,一个基本的思路是: 将配置配置为模板的形式, 根据不同的环境定义环境变量 根据环境变量渲染模板,生成具体的配置 这里面就涉及到了一个字符串模板的功能,关于模 ...

  2. Python 容器使用的 5 个技巧和 2 个误区

    "容器"这两个字很少被 Python 技术文章提起.一看到"容器",大家想到的多是那头蓝色小鲸鱼:Docker,但这篇文章和它没有任何关系.本文里的容器,是 P ...

  3. DQL---条件查询、单行函数、多行函数、分组函数、数据类型

    一.DQL 1.基本规则: (1)对于日期型数据,做 *,/ 运算不合法,可以进行 +, - 运算.比如给日期加一天或减一个月,结果仍为一个日期.两个日期间只能为减法,返回两个日期相差的天数,两个日期 ...

  4. arcgis api for javascript 学习(六) 地图打印

    1.本文应用arcgis api for javascript对发布的动态地图进行打印,打印的为PDF格式,打印出来如图: 2.需要特别注意的是:我们在运行代码前,需要打开PrintingTools, ...

  5. 微服务:Eureka+Zuul+Ribbon+Feign+Hystrix构建微服务架构

    原文地址:http://blog.csdn.net/qq_18675693/article/details/53282031 本案例将打架一个微服务框架,参考来源官方参考文档 微服务:是什么?网上有一 ...

  6. 文:你可以杀我,但你不能评价(judge)我

    原创 豆瓣影评:“现代战争启示录”豆友影评 2006-12-18 20:24:20 本文刊载于<豆瓣影评>豆友“芹泽虾饺菌”的影评  原文标题<剃刀边缘的疯狂> 文/芹泽虾饺菌 ...

  7. CentOS离线安装Rust

    条件所限,无法在线连接外网,或是下载慢,容易中断时,可以采用. 一,下载离线安装包 https://forge.rust-lang.org/other-installation-methods.htm ...

  8. 初学JavaScript正则表达式(九)

    分组:可以用 ( ) 来进行分组 一.Byron重复三次             Byron{3} --------- Byronnn 只是将紧挨着量词的字符重复            (Byron) ...

  9. RabbitMQ学习笔记(一、消息中间件基础)

    目录: 什么是消息中间件 消息中间件的作用 JMS规范 AMQP协议 RabbitMQ简介 Hello World 什么是消息中间件: 消息中间件(Message Queue Middleware,简 ...

  10. conda基础命令

    1.首先在所在系统中安装Anaconda.可以打开命令行输入conda -V检验是否安装以及当前conda的版本. 2.conda常用的命令. 1)conda list 查看安装了哪些包. 2)con ...