Java帝国之JMS的诞生

RV1126平台librga图像旋转裁剪实战 本文详细介绍了在rv1126平台上使用librga库实现图像旋转和裁剪的方法。首先解释了librga的基本概念和关键对象,包括源图像、目标图像和操作参数。随后分步骤说明了初始化设置、缓冲区创建、裁剪区域定义(通过坐标和尺寸参数)以及旋转操作(支持常见角度)。提供了完整的示例代码演示如何组合裁剪和旋转操作,并强调了性能优化、错误处理、格式支持等注意事项。通过硬件加速的librga,可以在rv1126平台上高效完成图像处理任务。 阅读详情

1

背景

本文续上篇《Java 帝国之消息队列》

自从张家村的ZhangMQ问世以来,大家都看到了消息队列在分布式系统中的巨大好处,纷纷另起炉灶搞一套自己的消息队列,各种MQ产品如雨后春笋班出现,各家都疯狂的宣传自己的宝贝。

为了吸引程序猿来使用, 各家八仙过海,各显神通,定义了各式各样的API,    由于是独立发展,这些API协议多样,互不兼容, 学习成本高,使用起来非常不方便。

这是帝国所不能容忍的 !

其实Java 帝国非常擅长搞出标准的协议和接口, 之前的JDBC就是一个典型的例子(参见文章《JDBC的诞生》), 制定了协议以后, 让各个产品厂商去实现, 实现了针对数据库编程的统一接口。

既然数据库可以这么干, 消息队列肯定也没问题!

由于张家村开发了第一个消息队列产品, 帝国把制定标准接口的光荣使命交给了张家村。

2

消息队列接口设计

张家村经验丰富的老村长又把任务分给了小张, 告诉他我们要做的是一个厂商独立的标准接口, 让他先去调研一下时下流行的MQ的现状。

小张先找到了某大厂著名MQ,  它占据了企业级市场不少份额, 但是直接使用它的 Java API 编程的话就不那么容易了, 大家可以快速浏览下:

0?wx_fmt=png

小张能看的出这是在发送一个消息,但这MQEnvironment, openOptions,MQPutMessageOptions 看起来让小张心烦,特别是还得理解Queue Manager这样的概念,有点不容易。

小张又找了一个以开源吸引人的RabbitMQ , 这个看起来清爽多了:

0?wx_fmt=png

但是这queueDeclare方法 和 basicPublish 方法小张总觉得的不爽。

只看了两个消息队列, 小张就不想再看了, 他去找村长说: 这差别也太大了,根本无法统一。

村长说:”不要被纷繁的现象迷住了双眼, 要看透背后的本质, 做出适当的抽象才可以。“

又是抽象!  小张暗自叹气, 这抽象实在是太难了。

(参见文章:《 抽象,程序员必备的能力 》 )

”你深入思考下“  村长看出了小张的困难, 鼓励他说: ”其实也没那么难, 我们先搞出几个最基本的概念,  记不记得操作系统中学过的生产者-消费者模型?  我们完全可以应用到这里来啊,   消息生产者(Message Producer), 消息消费者 (Messge Consumer) ,  生产者提供发送消息的方法, 消费者提供接收消息的方法, 如果加上消息队列 (Message Queue) 的话就是这样:“

0?wx_fmt=png

小张说:”这也太抽象了吧, 我看人家还有什么Queue Manager,  Connection ,Channel 之类的“

村长说: ”别急啊, 你看不管是生产者向队列发送消息,还是消费者去接收消息, 其实都是在和消息队列进行交互, 所以我们再引入一个会话(Session)的概念出来 。“

”奥,  我有点明白了 ,Session 可以创建消息, 还可以引入事务的支持呢“  小张思维敏捷

“不错,  其实消息生产者/消费者也应该由Session来创建,因为他们要发送/接收消息肯定是在一个会话中, 另外你想想, Session对象由谁来创建?”

小张说: “应该是Connection ” 说着小张画了一张图:

0?wx_fmt=png

“你看这概念不就出来了,是不是很简单? ” 村长笑着说。

小张挠挠头说: “会者不难,难者不会啊, 对了,我们还缺乏最关键的连接参数(ip地址,端口等)还有队列的名称之类的信息。 这些信息怎么办?”

“这确实有点复杂,各个厂商的具体情况差别太大。” 村长也表示犯难 ,“你让我想想, 下午再聊。”

3

配置和代码的分离

小张中午吃饭的时候也在想, 这些复杂的配置参数该怎么办, 要是都让程序员在代码里写,那就太丑陋了吧, 因为不同的MQ产品,配置都不一样啊。

下午的时候,看到村长一副喜气洋洋的表情, 小张知道问题解决了。

村长说: “我想到了一个办法, 一个很简单,但是有效的办法。”

小张说:“别卖关子了,快说吧”

”其实也是又老又俗的办法了,  这个办法就是把配置和代码分开,  你不是说这些连接参数很复杂,各个厂商不同吗?  那就作为配置信息把它放到Web容器里,对外只提供一个简单的ConnectionFactory的接口,由这个ConnectionFactory来创建Connection, 当然了各个厂商必须实现这个ConnectionFactory“

"那怎么才能得到这个ConnectionFactory ?"

"这就简单了, 对程序员来讲,通过JNDI 就可以轻松拿到了, 例如:"

0?wx_fmt=png

”这办法不错,把细节都隐藏起来了, 既然ConnectionFactory可以这么搞, 队列(Queue)的配置信息也可以这么办啊。“

村长说:”所以ConnectionFactory, Queue 就是隔离细节的抽象层。”

4

再次抽象

标准接口初具模型,小张很高兴,晚上请喜欢的张二妮吃饭, 忍不住得瑟了一下。

张二妮说:“你们两个老土,定义的标准接口,都已经过时了!”

小张很生气: “怎么可能呢?”

二妮说:“告诉你们吧, 你们搞的这个叫Point to Point模型,就是一个发送方,对应一个接收方, 现在外边有很多人在用 发布/订阅 的模型,你们知道不? ”

0?wx_fmt=png

“一个客户端(Client1)对一个Topic发布了消息, 很多订阅了这个Topic的客户端(Client2, Client3) 都可以接收到这个消息的副本。”

小张呆住了, 这和以前ZhangMQ的方式完全不同, 队列都不见了, 引入了一个新的主题(Topic)的概念。

第二天, 小张赶紧去找村长, 告诉他发生了新情况。

村长说: “你呀,还是太年轻, 慌什么,深入思考一下, 这个发布/订阅的本质和我们之前的生产者/消费者没什么不同。 ”

小张说: “那人家还有Topic的概念呢。”

“我们可以把Topic和Queue 变成一个更抽象的概念,他们都是消息的目的地, 嗯, 就叫做Destination吧,这个Destination的细节也是需要配置出来的, 通过JNDI来获取。”

“那订阅怎么处理?”

村长说: “原来我们定义的是MessageConsumer, 现在增加一个新概念叫做 TopicSubscriber , 可以从Destination获取消息,这不就行了, 其实从本质上来讲Subscriber也是消息消费者的一种而已。”

“那怎么才能实现订阅的功能呢?”

“别忘了, 我们只定义接口行为, 具体的实现需要由各个产品来负责!”

0?wx_fmt=png

小张看着这幅图, 深感抽象的威力巨大, 这么多的细节最后变成了这几个简单的概念!

小张还特意写了一段代码,展示上面的概念:

0?wx_fmt=png

张家村把这个设计交了上去, 帝国很满意,把它起名为Java Message Service (JMS), 随后强制各大产品实现JMS, 否则就不颁发进京证, 没这个证别想在帝国做生意!

JMS由于设计良好,概念清晰,其实不用怎么强制,很快就流行开了,成为了Java 帝国的事实标准。

后记: 其实JMS规范的制定是在Sun的领导下,各大厂商密切参与完成的:

There were a number of MOM vendors that participated in the creation of JMS. It was an industry effort rather than a Sun effort. Sun was the spec lead and did shepherd the work but it would not have been successful without the direct involvement of the messaging vendors. Although our original objective was to provide a Java API for connectivity to MOM systems, this changed over the course of the work to a broader objective of supporting messaging as a first class Java distributed computing paradigm on equal footing with RPC.

- Mark Hapner, JMS spec lead, Sun Microsystems

(完)

你看到的只是冰山一角, 更多精彩文章,参见《码农翻身2016文章精华》

有心得想和大家分享? 欢迎投稿 ! 我的联系方式:微信:liuxinlehan  QQ: 3340792577

0?wx_fmt=jpeg

公众号:码农翻身

“码农翻身”公众号由工作15年的前IBM架构师创建,分享编程和职场的经验教训。

深入解析ADC采样电容:从充电误差到LSB精度的关键设计 本文深入解析了ADC采样电容在模数转换中的核心作用,重点探讨了充电时间常数与采样误差的博弈关系。通过推导最小采样时间公式,揭示了精度、速度、源阻抗与内部电容之间的制约关系,并提供了从理论计算到外部驱动电路设计的实战指南,是确保ADC达到LSB精度的关键。 阅读详情

相关推荐

手把手教你用STM32H743+FreeRTOS+LWIP搭建物联网网关(附完整工程)

本文详细介绍了如何使用STM32H743微控制器结合FreeRTOS实时操作系统和LWIP协议栈构建高性能物联网网关。内容涵盖硬件配置、FreeRTOS任务设计、LWIP协议栈优化及物联网协议集成,提供完整工程示例,助力开发者快速实现稳定可靠的网络通信枢纽。

weixin_42623010的博客 503

JMS解析(一)——JMS简介

消息中间件MQ及ActiveMQ介绍_踩踩踩从踩的博客-优快云博客 前言 上篇文章对消息中间件做了个解析,以及ActiveMQ的安装和基本使用,做了个基本了解,因为如果不了JMS规范,一定是不学不好消息中间件和ActiveMQ,本篇文章会从JMS是什么,以及JMS如何使用API,消息如何发送,消息模型等等去解析JMS 概述 爪哇消息服务 (JMS) (oracle.com) JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(

踩踩踩从踩的博客 1万+

Delta-Sigma调制(DSM)技术

前言 数字信号处理和通信系统的性能很大程度上受到了模拟信号到数字信号转换接口——ADC的精度和分辨率的限制。而传统的线性脉冲编码调制(PCM)ADC受到了制造工艺的限制,无法达到很高的分辨率。但基于Delta-Sigma调制技术的ADC可以在现有工艺下实现高分辨率(大于16位),同时由于结构简单,所以易于实现。低成本高性能使得Delta-Sigma调制技术得到了广泛的应用。 Delta-Sigma型ADC的结构原理图如下图所示: 它最大的优势在于仅用1位ADC进行数据转换,同时其模拟电路部分结构简单不需要

阿星的博客 2万+

第一章、jms介绍--开篇

一、历史2001年6月25日,Java消息服务发布JMS 1.0.2b,2002年3月18日Java消息服务发布 1.1,统一了消息域,奠定了java MOM的发展模式。先前和后来的 有许多优化产品,开源优化的有:APACHE ActiveMQ、JBOSS HornetQ商业的有

专注海量数据 1012

模拟IC实战—30天精通Sigma-delta(Σ-Δ) ADC 行为级建模与仿真

本文为模拟IC工程师提供了一套为期30天的Sigma-delta ADC行为级建模与仿真实战指南。文章深入浅出地阐释了Sigma-delta ADC如何通过过采样和噪声整形两大核心技术实现高精度转换,并重点演示了如何使用Python从零搭建一阶和二阶调制器模型,进行性能仿真与关键指标分析,为后续电路级设计提供清晰的性能预算和架构指导。

weixin_29237635的博客 400

HAL库STM32CubeMX+DHT11温湿度传感器模块化驱动与OLED显示实战

本文详细介绍了基于HAL库和STM32CubeMX开发DHT11温湿度传感器模块化驱动的实战过程。通过精确的时序控制和模块化封装,实现了传感器数据采集,并结合OLED显示模块实时展示温湿度信息,为嵌入式开发者提供了完整的解决方案。

h6j7k8l9p0的博客 1135

JMS==》消息中间件==>之理论

**1.什么是JMS** java message service (java消息服务) jms是jdk 底层定义的规范 各大厂商都要实现这个规范技术 2 Jms的作用 在soa分布式架构系统中 或者企业中多个项目中 进行多个系统的异步传输 同步技术: dubbo 同步技术 实用性高 controller---->service-...

wangxuejava的博客 199

AUTOSAR FEE 换页机制深度解析:从原理到实现逻辑

​​没有磨损均衡的EEPROM模拟,如同在沙地上建造城堡​​ ——AUTOSAR存储系统设计箴言

汽车电子软件领域知识分享 1342

Java消息队列与JMS的诞生

https://mp.weixin.qq.com/s?__biz=MzAxOTc0NzExNg==&mid=2665513507&idx=1&sn=d6db79c1ae03ba9260fb0fb77727bb54&chksm=80d67a60b7a1f376e7ad1e2c3276e8b565f045b1c7e21ef90926f69d99f969557737eb5...

mhHao的博客 251

Cesium教程(十七):淹没分析

淹没分析是根据某片区域的地形及洪水流量速度,动态模拟该地形区域水位逐渐上涨的淹没过程。该功能可适用于山区、丘陵等地形起伏较大区域,模拟洪水涨到安全限定高度的淹没过程,为防洪水救灾提供一定的参考。此外,还可以为河谷地带修建水利工程设计与选址提供参考依据。

WwLK123的博客 3009

Python高阶爬虫:逆向工程模拟Wind/同花顺等金融终端数据抓取

本文详细阐述了模拟金融数据终端进行数据抓取的全套技术方案。我们从法律合规性讲起,选择了Playwright作为核心自动化工具,通过两个实战案例(同花顺网页版和Wind桌面版)演示了从分析、模拟到数据解析的完整流程,并进一步介绍了构建健壮爬虫系统所需的高级技巧。我们的策略是:启动一个由Playwright控制的浏览器,模拟真人登录,然后监听所有网络请求,从中过滤出我们需要的那个数据API。if key in ['f43', 'f169', 'f170', 'f46', 'f60']: # 价格类字段。

2201_76125261的博客 546

java帝国

文章目录回调消息队列socket logback引出的问题 回调 回调 回调机制 抽象类回调 接口回调 消息队列 消息队列 系统拆分 消息队列 socket 张大胖的socket 操作系统需要抽象出的概念 ...

donggandapao的博客 307

基于YOLO26深度学习框架的人脸识别门禁系统的算法研究实现方法

本文研究了基于YOLO26深度学习框架的人脸识别门禁系统实现方法。系统采用YOLO26目标检测算法,通过CSPDarknet53主干网络、特征金字塔结构和注意力机制实现高效人脸检测。研究内容包括数据预处理、模型训练优化和身份验证等关键技术,使用迁移学习策略和CIoU损失函数提升检测精度。该系统可应用于智能安防场景,具有实时性强、识别准确的特点,为门禁管理提供了智能化解决方案。

一键难忘的博客 766

Ubuntu 22.04/24.04 MySQL 安装与配置全指南

MySQL 是最主流的开源关系型数据库,其在 Ubuntu 系统中的部署涉及包管理、服务控制、用户认证、网络配置与安全策略等多层机制。由于 Ubuntu 自 22.04 起全面采用 systemd、默认启用 caching_sha2_password 认证插件,并对 MySQL 进行深度定制(如路径重定向、源码重编译),传统安装方式极易失败。理解 apt 源策略、systemd 服务名变更、auth_socket 认证机制及 bind-address 与防火墙协同逻辑,是实现本地开发、远程连接与稳定运行的技

weixin_34021089的博客 448

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

贝叶斯统计 [韦来生编]

贝叶斯(Bayes)统计是近几十年来迅速发展起来的数理统计的一个重要分支。贝叶斯方法与经典统计方法的主要不同之处是进行统计推断时除了利用样本信息外,还要利用参数的先验信息,因此可以提高统计推断或统计决策的效果。它在经济、金融、生物、医学、自然科学和社会科学等许多领域具有广泛的应用。贝叶斯方法的研究已渗透到了统计学的几乎所有领域。作者在给中国科学技术大学概率论与数理统计专业本科生开设的“数理统计”课程中有一章专门讲授“贝叶斯方法和统计决策理论”,近十年来也给中国科学技术大学概率统计专业研究生开设过几次“贝叶斯分析”课。本书是在对过去讲稿的内容作了适当的增减和调整的基础上完成的。  本书共分六章。第1章是绪论,介绍了贝叶斯统计的若干基本概念,同时对必要的数理统计的基础知识有重点地作了回顾。第二章介绍了确定先验分布的若干可供选择的方法。第三章介绍了几类常见统计模型参数的后验分布的主要结果和计算方法。第四章和第五章分别介绍了“贝叶斯统计推断”和“贝叶斯统计决策”的内容。第六章介绍了贝叶斯统计计算的若干方法,包括蒙特卡洛方法和马尔可夫链蒙特卡洛(MCMC)方法以及相关统计软件的简介。本书的每一章附右大量的例题和习题,书末附有常用的几个表格和部分习题解答供读者查用。  大约可在54学时内讲授本书的第1章至第六章的主要内容,教师可根据学时需要选讲本书第1章至第六章的部分内容。书中标“*”号的章节可略去不讲,留给读者作为阅读材料。第六章例题中的R代码和部分例题的数据文件等可从作者个人主页下载。  作者在编写本书的过程中参考了J.O.Berger教授的《统计决策论及贝叶斯分析》和茆诗松教授编写的《贝叶斯统计》等书中的一些内容,以及《贝叶斯分析》一书中由张伟平博士编写的有关贝叶斯统计计算的一些内容。在此表示衷心感谢。  本书编写准备过程中,中国科学技术大学统计与金融系的几个研究生帮助完成了本书部分中文的录入和排版,作者对他们的辛勤工作表示真诚的感谢。高等教育出版社为本书的出版给予了大力支持。在此一并致谢。

轻松搞定RabbitMQ开篇:Java消息队列与JMS的诞生

Java 帝国之消息队列原创: 刘欣 码农翻身 2017-02-06张家村的历史Java 帝国的张家村正在迎来一次重大的变革。5年前网上购物兴起的时候, 帝国非常看好, 决定向这个领域进军, 于是兴建了张家村, 在这里安装了Java 虚拟机和数据库, 然后部署了一个基于Web的订单系统和一个库存系统, 由张家村的人负责操作。张家村的老村长很清楚, 说是两个系统, 其实是逻辑上的一种划分方式,  在...

Java技术江湖 1969

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

从JMS标准看接口编程、模块整合及相关技术jndi,spi等

最近看了一篇微信上的文章:是 【码农翻身】公众号的刘欣作者写的Java帝国之JMS的诞生。最近恰好关注到支付宝的开源分布式消息中间件–Metamorphosis(MetaQ)(现在这个项目改名为RocketMQ)非常想看一下源码,但我知道阿里的一般比较复杂,所以从简单的activeMQ开始,当然这个JMS标准产生过程看看更好。 http://mp.weixin.qq.com/s/...

herriman的博客 322

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

日志系统诞生记

前言 Java帝国在诞生之初就提供了集合、线程、IO、网络等常用功能,从C和C++领地那里吸引了大量程序员过来加盟,但是却有意无意地忽略了一个重要的功能: 输出日志。 对于这一点,IO大臣其实非常清楚, 日志是个很重要的东西, 因为程序运行起来以后, 基本上就是一个黑盒子,如果程序的行为和预料的不一致,那就是出现Bug了,如何去定位这个Bug 呢? 臣民们能用的工具有两个,第一个就是单...

a1405的专栏 200

走进JavaWeb技术世界9:Java日志系统的诞生与发展

本文出自我的公众号:程序员江湖。 满满干货,关注就送。 一个著名的日志系统是怎么设计出来的? 1前言 Java帝国在诞生之初就提供了集合、线程、IO、网络等常用功能,从C和C++领地那里吸引了大量程序员过来加盟,但是却有意无意地忽略了一个重要的功能: 输出日志。 ...

weixin_33973609的博客 92

Java 帝国之Java bean(下)

上一篇提到Java bean 的规范虽然定义的不错, 但却没有获得意料中的成功, 尤其是Java帝国所期待的桌面开发组件化市场上。我和小码哥多么期待优快云也能出一期《...

码农翻身 613

一个著名的日志系统是怎么设计出来的?

一个著名的日志系统是怎么设计出来的? 原创: 老刘 码农翻身 2017-10-23 1前言 Java帝国在诞生之初就提供了集合、线程、IO、网络等常用功能,从C和C++领地那里吸引了大量程序员过来加盟,但是却有意无意地忽略了一个重要的功能: 输出日志。 对于这一点,IO大臣其实非常清楚, 日志是个很重要的东西, 因为程序运行起来以后, 基本上就是一个黑盒子,如果程序的行为和预料的...

游侠之魂的专栏 733

java日志管理-学习(一)

java 日志学习一SLF4J和Logback和Log4j和Logging的区别与联系 slf4j、apache common logging、log4j、logback SLF4J和Logback和Log4j和Logging的区别与联系 转载来源-博客 前言 Java帝国在诞生之初就提供了集合、线程、IO、网络等常用功能,从C和C++领地那里吸引了大量程序员过来加盟,但是却有意无意地忽略了一个重...

wanghao723206的博客 439

SLF4J和Logback和Log4j和Logging的区别与联系

前言 Java帝国在诞生之初就提供了集合、线程、IO、网络等常用功能,从C和C++领地那里吸引了大量程序员过来加盟,但是却有意无意地忽略了一个重要的功能: 输出日志。 对于这一点,IO大臣其实非常清楚, 日志是个很重要的东西, 因为程序运行起来以后, 基本上就是一个黑盒子,如果程序的行为和预料的不一致,那就是出现Bug了,如何去定位这个Bug 呢? 臣民们能用的工具有两个,第一个就是单步调试,一步步地跟踪,查看代码中变量的值, 这种办法费时费力, 并且只能在程序员的机器上才能用。 第二

weixin_43473758的博客 279
上一篇: Java帝国之单例设计模式
下一篇: 漫画:编程是文科还是理科?
码农翻身
码农翻身 《码农翻身》作者 《码农翻身》作者
博客等级 码龄8年 3万+粉丝 1084原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值