message broker

article/2025/11/4 8:12:03
MB概述
MB的全称是message broker,即“消息代理”。“消息”一词前几年比较火,消息中间件也卖的很火,当时似乎J2EE的产品都要跟“消息”、“中间件”扯上点关系,以彰显潮流。我觉得初学者只需记住“消息”的异步性即可,也就是“消息”和传统的网络连接、远程方法调用等的最大区别,就是你一旦发出消息以后,不用再管它的死活,中间件会处理一切事务,出了问题也会通知你,这样可以更好的分离业务逻辑。把消息当成邮件的话,那么传统网络连接就是由你去送信,而中间件则好比邮局,它来提供送信服务,并且可以跨国境、跨语言,完全不用你操心(相当于中间件可以连接异构平台),使用者只需等在家门口收信。
在说“代理”之前,先讲一下MQ的基本概念。MQ即message queue,消息队列,也就是IBM的主打消息中间件产品,IBM几乎所有SOA相关的产品,都是构建于MQ之上的,没有MQ强大的消息传输能力,那么IBM很多产品都做不起来。在这里不赘述MQ的功能,初学者只需把MQ当成一个非常可靠的传输通道即可,你只要往里面放东西,MQ就会把消息传到目的地。
那有了强大的MQ还要“代理”干什么呢?如果你用过MQ,或者类似的产品如apache的开源JMS产品“ActiveMQ”,就会发现,尽管用MQ不必考虑网络连接、平台异构,但是你在配置的时候、以及使用MQ编程的时候,都要指定目的地,比如设置IP地址。这样的程序依旧存在很大耦合性,万一某个组件的IP变了,所有跟他相关的组件都得改动,轻则修改配置文件、重则重写代码。这时“代理”的作用就开始凸显了。
所有组件的MQ队列都可以直接连接到MB上,MB相当于一个公共服务中心。MB接收所有消息,然后自动分析其中的内容,找到相应的目的地,进行路由转发,好比你在写信时,只需写明收信人的姓名、身份证,哪怕收信人搬到天涯海角,只要他在MB邮局中登记了,那MB就可以把信交给他,这样进一步地分离了业务和底层通信,我只需要知道业务概念上的“他”,就可以把消息交给他。此外,MB还可以进行消息转换,这就像是自动翻译信件,我现在可以用中文写封信给本拉登,我不需要知道他具体藏在哪里,信件就会自动翻译成阿富汗的文字,送到本拉登手里。
所以,代理的两个核心功能就是:“消息路由”和“消息格式转换”。MB本质上也是一个服务总线,所有的服务组件接入到MB中,服务将消息塞给MB,MB来决定怎么转发,这样让服务愈加成为一个独立的实体,和其他服务的耦合性进一步降低,从而达到SOA的境界。
 
MB初览
说了那么多大道理,终于开始讲到MB的具体内容了。下面的图片摘自IBM的红皮书,是MB的总体架构,我粗略的描述一下。

可以看到,MB里面有两大块内容,一个是toolkit,也就是开发环境,后面我们会讲到;还有一个是broker domain,即代理域。代理域里面有两个核心部件,一个是配置管理器configuration manager,一个是代理broker。
配置管理器其实很像MQ的队列管理器,或者是WAS的deployment manager,都是起到一个管理作用,在MB里当然是管理众多的broker了。我们平时对broker的管理、维护操作,其实都是通过配置管理器完成的。
代理broker是真正体现MB设计思想的地方,上面的图片中有像流程图一样的东西,即message flow,是消息的流程图(从什么地方流进来,再从什么地方流出去);还有message set,即消息集,说白了是描述消息长什么样子,它的结构、内容是怎样的。其实,message flow对应了上文所说的“消息路由”,而message set则对应“消息格式转换”,你肯定要清楚两种消息的格式,才能定义互相转换的规则。

MB的外围是各种类型的应用程序,他们接入MB的方式可以多种多样,可以是Webservice,也可以是数据库、文件、HTTP连接,等等,不一定局限于MQ
圆柱体代表的则是数据库了,这是尽IT人皆知的。因为MB的很多信息,包括配置信息、以及broker的运行时信息都要通过数据库保存。broker本身也可以操作数据库,你可以在流程的某个节点上增删查改某个数据库
 
下图是WMBT(websphere mb toolkit)的界面

可以看到,WMBT是基于eclipse的,所以大部分java开发者应该能很快上手。开发MB程序和开发J2EE程序差不多,也是先新建一个项目,然后编辑,最后部署。
1号区域是一个消息流,可以看到非常直观:从MQ读入——计算(转换成web service格式)——发送http请求到web service的url——计算(转换回MQ消息格式)——放入MQ
2号区域是节点选择面板,MB自带了几十种节点给我们选择,同时我们也可以自己创建节点
3号区域是属性面板,当你选择某个节点时,可以在其中编辑节点的属性
4号区域是域连接面板,开发好的消息流和消息格式,必须首先在MBT中连接到对应的配置管理器,再将打包好的流程部署到对应的broker中,这个过程也可以由命令行完成
5号区域则类似eclipse的项目集合,里面是所有的MB项目
总结
还是打个比方。首先,我们把MB看做一个功能超级强大的路由器,它支持多种接入方式,也就是MB路由器上的端口有很多种,MQ是比较常用的一种方式,所以MQ就像常用的RJ45接口的5类双绞线。但同时MB还支持JMS、SCADA等各类接入标准。在MB内部,我们管理员定义好路由规则(编写消息流)。其次,从MQ过来的信号,可以转换成其他网络协议的信号(消息格式转换),这类似于网桥功能,可以跨越不同网络。同时,MB的性能非常好,可以进行大数据量交换,这一点又很像是交换机。最后,MB可以理解业务逻辑,它的路由不仅像路由器那样针对消息头进行路由,还可以根据消息的业务内容进行路由,酷似应用网关。

http://chatgpt.dhexx.cn/article/R0asdxSA.shtml

相关文章

MP3音频文件格式(MPEG-1 audio layer 3)

MP3音频文件格式 【百度百科】mp3 (一种音频编码方式) 【维基百科】MP3(本文重定向自 MPEG-1 Audio Layer 3) MP3(MPEG-1 audio layer 3) MPEG-1音频分三层,分别为 MPEG-1 Layer1,MPEG-1 Layer2 以及 MPE…

怎么把wav文件改成mp3?

怎么把wav文件改成mp3?有过摄像摄影经历的小伙伴都应该认识wav,wav就是他们作品的保存格式。因为wav格式的文件体积特别大,在储存的时候会占用我们大量的内存,而且为了播放方便,我们通常要把wav文件改成mp3格式的&…

音频文件如何转成mp3格式

当提到音频文件格式时,大家往往会想到最为流行和广泛使用的mp3格式。mp3是一种广受欢迎的音频格式,因为各种音频格式自身特点的原因,所以将其他格式的音频文件转换成mp3是非常普遍的需求。就比如在我们日常生活中,下载到的各种格式…

如何转换音频格式为mp3?

一提到音乐,大家先想到的应该就是MP3了,既然MP3作为常用的,被大家所熟知的一种音频格式,那它必定有其他格式无可比拟的优点。其实mp3从功能上来讲它具有更强的携带性和传输性,利于保存和分享;其次MP3本身的…

电脑音频转换mp3格式怎么弄,教你音频怎么转换mp3格式

mp3格式是目前几乎全兼容的格式了,在我们参加一些会议或讲座时,需要录制一些重要的信息,结束后再进行复盘或分享。然而,不同的录制工具录制的音频格式也不同,这时使用软件将音频统一成mp3格式的话,就会方便…

免费在线MP3转换器:将音乐文件转换为MP3格式

在今天的数字时代,音乐成为了人们生活中不可或缺的一部分。然而,由于音乐文件格式的不同,我们有时可能无法在不同的设备上播放我们最喜爱的歌曲。MP3格式作为最常用的音乐文件格式之一,通常可以被几乎所有的设备支持,因…

mp3格式怎么弄?分享三个音频文件格式转换的方法

不知道小伙伴们有没有遇到过这样的情况,在网上下载一首歌下来,正想打开,结果却发现我们的播放器无法播放。你们知道这是为什么嘛,其实我们的音频文件是有很多不同的格式,其中就有些比较少见的格式,我们的音…

如何从MP4视频文件中抽取MP3音频?

简 介: 为了能够处理视频中的音频,测试了两种提取视频中的音频方法。一种是利用格式工程软件另外一种利用ffmpeg软件。 关键词: 视频文件,音频文件,mp4,mp3 #mermaid-svg-sPs0isryqtLTjZyg {font-family:&q…

如何将音频文件转换为MP3格式?

音频文件有很多种格式,如 WAV、FLAC、AAC 等,其中 MP3 是最为常见的一种格式,因为它具有压缩比高、音质损失少、兼容性强等优点,适合在各种设备上播放。如果你想将一个音频文件转换为 MP3 格式,可以采用以下几种方法&a…

Next() Nextline() hasNext()区别

next类和hasNext方法遇到缓冲区没数据时,会阻塞,等待输入后next类会读取,hasNext会返回true 1)nextLine nextLine()方法返回的是"\n"之前的所有字符,它是可以得到带空格的字符串的。 …

BNext

又搬来了大神器啊 来自德国HassoPlattner计算机系统工程研究院的NianhuiGuo和HaojinYang等研究者提出了BNext模型,成为第一个在ImageNet数据集上top1分类准确率突破80%的BNN。 两年前,依靠早期 BNN 工作 XNOR-Net 起家的 XNOR.AI 被苹果公司收购&#…

Next.js学习笔记

这是一个用于生产环境的React 框架,Next.js 为您提供生产环境所需的所有功能以及最佳的开发体验:包括静态及服务器端融合渲染、 支持 TypeScript、智能化打包、 路由预取等功能 无需任何配置。 create-next-app 使用 create-next-app创建新的 Next.js …

搭建vue3项目时出现Cannot read property ‘nextSibling‘ of null报错

记录自己学习中,出现的错误 在搭建vue3项目,配置router,vuex,element-ui后,运行项目页面白屏,控制台出现了Cannot read property nextSibling of null的错误 查看main.ts 文件,此时的写法是: …

hasNext、hasNextLine、next、nextLine保姆级详解

目录 前言 hasNext和hasNextLine的区别 hasNext 和 next组合 hasNext 和 NextLine组合 hasNextLine 和 next组合 hasNextLine 和 nextLine组合 验证hasNext、hasNextLine对输入代码的存储寿命 总结 前言 在查阅了大量网上相关资料都没有一个完整的解释,并且我…

细节!关于Java中的next与nextLine

目录 一、发现问题 二、解决问题 (1)输入连续字符串 (2)输入不连续字符(含有空格等) (3)nextLine()方法在前,next()方法在后 (4)next()方法在…

NextJs 学习笔记

NextJs 学习笔记 简述 之前使用过 Nuxt3 基于前端框架 Vue3 来开发网站,因为 Nuxt3 很多地方借鉴了基于 React 的 SSR 框架 Next,因此最近抽时间开始学习一下 Next 这个框架。 创建项目 npx create-next-applatest # or yarn create next-app # or p…

next和nextLine的使用

(因为最近在学算法,我只讲实际应用方面的区别,不讲理论) 一、hasNext()与hasNextLine()的区别? 1、hasNext()方法会判断接下来是否有非空字符.如果有,则返回true,否则返回false 2、hasNextLine() 方法会根据行匹配模式…

nextSibling和nextElementSilbing使用以及解决兼容性问题

nextSibling和nextElementSilbing使用以及解决兼容性问题 1、今天学习了 获取兄弟节点 的方法 – nextSibling(获取下一个兄弟节点)、previousSibling(获取上一个兄弟节点) Node.nextSibling 是一个只读属性,返回其父节点的 childNodes 列表…

电脑同时连接内网和外网的方法

前提 首先电脑要有两个网卡,比如一个有线一个无线(常见,本文以此为例),或者两个无线网卡等等。 不论是有线连接内网(外网),还是无线连接内网(外网)&#xff0…

如何设置内网和外网同时使用

工作中,经常需要电脑连接内网服务,内网服务非公网,如果需要电脑连接公网需要进行切换,特别的麻烦。其实,一个电脑可以同时连接两个网络服务。工作中,经常会遇到网络设置的问题。对于工作,一般都…