一:JMS概念

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

JMS百度百科: https://baike.baidu.com/item/JMS/2836691?fr=aladdin

1.体系架构

JMS由以下元素组成:

JMS提供者:连接面向消息中间件的,JMS接口的一个实现。提供者可以是Java平台的JMS实现,也可以是非Java平台的面向消息中间件的适配器。
JMS客户:生产或消费基于消息的Java的应用程序或对象。
JMS生产者:创建并发送消息的JMS客户。
JMS消费者:接收消息的JMS客户。
JMS消息:包括可以在JMS客户之间传递的数据的对象。
JMS队列:一个容纳那些被发送的等待阅读的消息的区域。与队列名字所暗示的意思不同,消息的接受顺序并不一定要与消息的发送顺序相同。一旦一个消息被阅读,该消息将被从队列中移走。
JMS主题:一种支持发送消息给多个订阅者的机制。

2.对象模型

JMS对象模型包含如下几个要素:

1)连接工厂。连接工厂(ConnectionFactory)是由管理员创建,并绑定到JNDI树中。客户端使用JNDI查找连接工厂,然后利用连接工厂创建一个JMS连接。
2)JMS连接。JMS连接(Connection)表示JMS客户端和服务器端之间的一个活动的连接,是由客户端通过调用连接工厂的方法建立的。
3)JMS会话。JMS会话(Session)表示JMS客户与JMS服务器之间的会话状态。JMS会话建立在JMS连接上,表示客户与服务器之间的一个会话线程。
4)JMS目的。JMS目的(Destination),又称为消息队列,是实际的消息源。
5)JMS生产者和消费者。生产者(Message Producer)和消费者(Message Consumer)对象由Session对象创建,用于发送和接收消息。
6)JMS消息通常有两种类型:
​ ① 点对点(Point-to-Point)。在点对点的消息系统中,消息分发给一个单独的使用者。点对点消息往往与队列(javax.jms.Queue)相关联。
​ ② 发布/订阅(Publish/Subscribe)。发布/订阅消息系统支持一个事件驱动模型,消息生产者和消费者都参与消息的传递。生产者发布事件,而使用者订阅感兴趣的事件,并使用事件。该类型消息一般与特定的主题(javax.jms.Topic)关联。

3.模型

Java消息服务应用程序结构支持两种模型:

点对点或队列模型 Point-to-Point(P2P)
发布者/订阅者模型 Publish/Subscribe(Pub/Sub)

1.P2P模式图:

2.涉及到的概念

1.  消息队列(Queue)
2.  发送者(Sender)
3.  接收者(Receiver)
4.  每个消息都被发送到一个特定的队列,接收者从队列中获取消息。队列保留着消息,直到他们被消费或超时。

3.P2P的特点

1.每个消息只有一个消费者(Consumer)(即一旦被消费,消息就不再在消息队列中)
2.发送者和接收者之间在时间上没有依赖性,也就是说当发送者发送了消息之后,不管接收者有没有正在运行,它不会影响到消息被发送到队列
3.接收者在成功接收消息之后需向队列应答成功

1.Pub/Sub模式图

2.涉及到的概念

主题(Topic)
发布者(Publisher)
订阅者(Subscriber)
客户端将消息发送到主题。多个发布者将消息发送到Topic,系统将这些消息传递给多个订阅者。

3.Pub/Sub的特点

每个消息可以有多个消费者。
发布者和订阅者之间有时间上的依赖性。针对某个主题(Topic)的订阅者,它必须创建一个订阅者之后,才能消费发布者的消息,而且为了消费消息,订阅者必须保持运行的状态。
为了缓和这样严格的时间相关性,JMS允许订阅者创建一个可持久化的订阅。这样,即使订阅者没有被激活(运行),它也能接收到发布者的消息。
4.传递方式

JMS有两种传递消息的方式。标记为NON_PERSISTENT的消息最多投递一次,而标记为PERSISTENT的消息将使用暂存后再转送的机理投递。如果一个JMS服务离线,那么持久性消息不会丢失但是得等到这个服务恢复联机时才会被传递。所以默认的消息传递方式是非持久性的。即使使用非持久性消息可能降低内务和需要的存储器,并且这种传递方式只有当你不需要接收所有的消息时才使用。

JMS定义了五种不同的消息正文格式,以及调用的消息类型,允许你发送并接收以一些不同形式的数据,提供现有消息格式的一些级别的兼容性。

StreamMessage -- Java原始值的数据流
MapMessage--一套名称-值对
TextMessage--一个字符串对象
ObjectMessage--一个序列化的 Java对象
BytesMessage--一个未解释字节的数据流

二:消息中间件概述

1.MOM概述

MOM(Message Oriented Middleware)是面向消息的中间件,使用消息传送提供者来协调消息传送操作。MOM 需要提供 API 和管理工具。客户端使用api调用,把消息发送到由提供者管理的目的地。在发送消息之后,客户端会继续执行其他工作,并且在接收方收到这个消息确认之前,提供者一直保留该消息。

2.消息中间件产生的背景

在客户端与服务器进行通讯时.客户端调用后,必须等待服务对象完成处理返回结果才能继续执行。

客户与服务器对象的生命周期紧密耦合,客户进程和服务对象进程都都必须正常运行;如果由于服务对象崩溃或者网络故障导致用户的请求不可达,客户会受到异常。

点对点通信:客户的一次调用只发送给某个单独的目标对象。

3.什么是消息中间件

面向消息的中间件(MessageOrlented MiddlewareMOM)较好的解决了以上问题。发送者将消息发送给消息服务器,消息服务器将消息存放在若千队列中,在合适的时候再将消息转发给接收者。

==这种模式下,发送和接收是异步的,发送者无需等待; 二者的生命周期未必相同: 发送消息的时候接收者不一定运行,接收消息的时候发送者也不一定运行;一对多通信: 对于一个消息可以有多个接收者。==

三:springboot整合activemq

springboot2.0整合activemq: https://www.cnblogs.com/toov5/p/9937989.html

1.引入依赖
<!-- 引入web依赖 -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- activemq的springboot启动器 -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-activemq</artifactId>
</dependency>
2.配置yml文件
spring:activemq:broker-url: tcp://127.0.0.1:61616user: adminpassword: admin
my_queue: springboot-queue
server:port: 8080
3.创建QueueConfig类
@Configuration
public class QueueConfig {@Value("${my_queue}")private String myQueue;//首先将队列注入到SpringBoot容器中去@Beanpublic Queue logQueue() {return new ActiveMQQueue(myQueue);}
}
4.创建Producer类
@Component
public class Producer {@Autowiredprivate JmsMessagingTemplate jmsMessagingTemplate;//把队列注入进来@Autowired  //此注解默认是以类型找  在配置文件中 已经注入的  @Beanprivate Queue myqueue;//每隔5s时间向队列发送消息@Scheduled(fixedDelay=5000)public void send() {String msg = "测试消息队列"+System.currentTimeMillis();System.out.println("msg:"+msg);this.jmsMessagingTemplate.convertAndSend(myqueue, msg);}
}
5.创建Consumer类

另外新建一个springboot工程,pom文件相同。yaml文件中服务端口号与第一个不同。

spring:activemq:broker-url: tcp://127.0.0.1:61616user: adminpassword: admin
my_queue: springboot-queue
server:port: 8081
@Component
public class Consumer {//用这个注解去监听 监听的队列@JmsListener(destination="${my_queue}")public void receive(String msg) {System.out.println("消费者接受消息:"+msg);}
}

转载于:https://www.cnblogs.com/itzlg/p/10699480.html

一:ActiveMQ知识整理相关推荐

  1. python常用变量名_python基础知识整理

    Python Python开发 Python语言 python基础知识整理 序言:本文简单介绍python基础知识的一些重要知识点,用于总结复习,每个知识点的具体用法会在后面的博客中一一补充程序: 一 ...

  2. Spring AOP 知识整理

    为什么80%的码农都做不了架构师?>>>    AOP知识整理 面向切面编程(AOP)通过提供另外一种思考程序结构的途经来弥补面向对象编程(OOP)的不足.在OOP中模块化的关键单元 ...

  3. Linux系统基础知识整理

    一.说明 本篇文章,我将结合自己的实践以及简介,来对linux系统做一个直观清晰的介绍,使得哪些刚接触Linux的小伙伴可以快速入门,也方便自己以后进行复习查阅. 二.基本知识整理 1.Linux文件 ...

  4. 计算机二级c语基础知识,计算机二级C语基础知识整理.doc

    计算机二级C语基础知识整理 1.1 算法 算法:是一组有穷指令集,是解题方案的准确而完整的描述.通俗地说,算法就是计算机解题的过程.算法不等于程序,也不等于计算方法,程序的编制不可能优于算法的设计. ...

  5. js事件(Event)知识整理

    鼠标事件 鼠标移动到目标元素上的那一刻,首先触发mouseover  之后如果光标继续在元素上移动,则不断触发mousemove  如果按下鼠标上的设备(左键,右键,滚轮--),则触发mousedow ...

  6. Spring学习篇:IoC知识整理(一)

    现在正通过spring的官方文档学习spring,将自己学习时的点点滴滴记录下来. Ioc知识整理(一): IoC (Inversion of Control) 控制反转. 1.bean的别名 我们每 ...

  7. 使用Aspose.Cells的基础知识整理

    使用Aspose.Cells的基础知识整理 转自 http://www.cnblogs.com/kenblove/archive/2009/01/07/1371104.html 这两天用Aspose. ...

  8. 前端基础知识整理汇总(中)

    前端基础知识整理汇总(中) Call, bind, apply实现 // call Function.prototype.myCall = function (context) {context = ...

  9. 前端基础知识整理汇总(上)

    前端基础知识整理汇总(上) HTML页面的生命周期 HTML页面的生命周期有以下三个重要事件: 1.DOMContentLoaded -- 浏览器已经完全加载了 HTML,DOM 树已经构建完毕,但是 ...

最新文章

  1. opencv判断 线夹角_opencv计算直线的斜率、截距,与水平线弧度值、角度值
  2. Codeigniter设计和架构目标
  3. hibernate mysql 设置时区_Hibernate连接MYSQL失败提示时区错误该怎么解决?
  4. 差分隐私 python_主要开发语言为 Python/Rust:微软与哈佛大学合作开源差分隐私平台...
  5. part.write java_小白向:web中利用request.getPart()上传文件到服务器
  6. 用maven搭建 testNG+PowerMock+Mockito测试框架
  7. 英特尔多核联合实验室授牌仪式
  8. 单处理机系统的进程调度实验_Chcore -- 上交IPADS操作系统银杏书配套Lab实验笔记 - Lab3进程与异常(一)...
  9. thymeleaf的属性优先级
  10. 将Grub2安装到其他硬盘分区
  11. 使用Go语言开发生成阿里云ECS监控报表,定时自动发送邮件给指定人员
  12. 对比性句子sentiment analysis
  13. 北京理工大学计算机实验广域网通信与有,北京理工大学计算机实验七报告表.doc...
  14. java mifare_java – 使用SCL010获取Mifare Ultralight的UID
  15. 怎么通过抖音带货赚钱?史上最全面抖音带货攻略
  16. 【文本展开收起】uniapp—实现文本的展开与收起功能
  17. 简单温习一下快速排序
  18. Class 文件的魔数和文件版本号
  19. 网络代理和网络转发的区别
  20. C语言程序设计教程 北京邮电,C语言程序设计教程(第3版)/ 杨路明 9787563543403 北京邮电...

热门文章

  1. 移植dropbear 实现ssh远程登录功能
  2. linux上部署最新版本zookeeper伪分布式集群
  3. git 如何撤销提交
  4. 实用的无锁队列(二)
  5. 边缘计算框架_黑科技 | 英特尔发布边缘计算加速框架最新版本 | OpenVINO 2019R02...
  6. Golang实践录:静态资源文件整合:初步使用
  7. u-boot移植随笔:System.map文件格式
  8. 【Flink on k8s】JConsole 远程监控 TaskManager
  9. netty : io.netty.handler.codec.TooLongFrameException
  10. 95-240-040-原理-State-简介