| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Java知识库 -> 消息中间件学习二之ActiveMQ -> 正文阅读 |
|
[Java知识库]消息中间件学习二之ActiveMQ |
一、安装ActiveMQ是Apache旗下的一款消息中间实现,可以支持多语言客户端,也是一个老牌消息中间件实现,所以各项功能也相对成熟。 下载完成之后解压: 二、样例首先新建一个Springboo项目,然后引入ActiveMQ的jar包。
配置文件:
生产者:将每三秒钟发送一个消息到对应的队列中
消费者:消费者将不断的监听消息,然后打印消息
以上是Springboot的一个简单案例,接下来我们按照传统方式来写一个代码如下:
传统方式,完全按照第一部分中的顺序来执行,这就是一个标准的实现。此时我们再来看管理后台,两个队列分别有消息的产生和消费 三、深入分析第一、二部分只是简单安装和初步使用了API,接下来分别从消息类型、生产者、broker、消费者四个角度来分析ActiveMQ。 1、消息类型 队列是点对点模式,也就是一个消息只能是一个消费者消费,但是对于同一个队列,可以有多个生产者同时写入消息,以及多个消费者同时去消费消息 那么消息还可以分为持久化和非持久化方式,持久化方式也就是说在服务器重启之后,消息还存在,非持久化方式,消息保存在内存中,重启之后就会丢失(setDeliveryMode配置)。在ActiveMQ中可以配置持久化方式,在其配置文件中的< persistenceAdapter >节点即可,可以保存在硬盘上,也可以保存在数据库中。 那么此时会有个问题,比较服务器的内存是有限的,持久化数据存储在文件或者数据库中,非持久化数据存储在内存中,那么当非持久化数据达到内存不够用时,此时会怎样? 2、生产者 从生产者角度来讲,我们需要关心什么问题呢?首先消息发送是否支持同步和异步,消息发送失败之后,是否有重试机制、是否发送了重复消息,消息发送大小限制,以及消息时批量发还是单个发送(吞吐量问题)。 (一)消息发送方式 这里提到一个事务,我们在创建Session的时候,会设置两个参数一个是是否开启事务,另一个是响应机制,事务简单理解就是当前消息发送时候,因为某些原因需要回滚,这在ActiveMQ中是支持的,只需要开启事务即可也就是true,第二个参数就是消息签收模式,一般针对消费者。 (二)消息失败 (三)消息大小 当消息以异步方式发送时,此时可以采用一个窗口大小(producerWindowSize配置来控制消息发送)。生产者每发送一个消息,就会统计当前消息字节,当生产者发送的消息达到窗口大小时,此时新消息不会继续发送,会等待服务器的响应,因为每发送一个消息服务端的内存就会增加对应的大小,如果没有及时消费的话,服务器响应之后,会返回一个size大小,也就是此时服务端的内存使用减少了size,所以窗口大小相应减少,此时就可以继续发送。 3、broker broker就相当于一个ActiveMQ服务实例,也是存储消息和转发消息的核心所在,上边分析了消息的存储方式以及相应需要注意的事项。 如果查看ActiveMQ的配置文件会发现有如下配置(transport connector): broker-to-broker就是ActiveMQ中集群通信方式(network connector),可以通过这项配置来实现集群功能。 4、消费者 消费者可以同步的获取消息,也可以异步的通过监听器来获取服务端消息,对于消费者来说,需要处理重复数据,以及数据消费完成之后的应答(可以自动和手动)。消费者端还可以创建一个持久订阅,这种方式只针对主题模式,当消费者宕机之后,恢复之后可以继续读取主题数据。针对消费者,当消息没有被正确消费,服务端会有一个重发机制(默认6次),或者消息过期都会被放到死信队列中,所以在系统中可以有两个队列来保证业务的正常使用,一个正常队列,一个死信队列,后者主要是用于处理异常情况,但是也需要注意消息的重复消费问题 四、总结本文大致介绍了一下ActiveMQ的相关知识,ActiveMQ 的单机吞吐量在万级,可以支持ms级时效性,可用性高(集群),功能齐全。客户可以根据自身的需求进行选择。 以上,有任何不对的地方请指正,谢谢! |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 9:22:28- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |