不喜欢用 MQ。
如果是同一个系统内的不同模块,可以用数据库表,来传递消息;
如果是不同系统间数据接口,可以用 webservice(同步,现在好像是 gRPC 有点热)、SFTP/FTP协议(异步) 进行数据交换。
看不出有任何使用 MQ 的需要。除非甲方指定,看在钱的面子上,勉为其难去用一下。
MQ 是异步通讯技术,与之相对的是 SFTP/FTP 。相比较而言,MQ 毫无优势。
速度、简易性、稳定性、标准化等各方面,MQ 完败。
SFTP/FTP 也能轻松削峰与限流(MQ 介绍文档常说的优点)。发送方快速发,接收方慢速处理、即时或滞后处理,都可以。
使用接收方webservice,也可以收到数据后先保存在接口表中,后慢速处理。整体也相当于异步了,也能削峰与限流。
MQ 起初就是几个 Java 软件厂商弄出来,只为卖钱。虽然后来微软与开源社区跟进,微软甚至把它做进 Windows 自带组件,实际上没有必要用这种技术。
微软现在也不怎么提了。Java /C#书籍提的也少了。
但执迷于其中的人,仍旧不少,特别是 Java 圈的。而 C# 圈的基本不用它。
我觉得,有时候多学几门开发语言,交叉对比,对于技术选型,很有帮助。
比如,我做软件项目,java-web 与 asp.net 反复交叉,时间长了,就知道 web 后端 MVC 领域,用 Apache Velocity (java-web) 与 NVelocity (asp.net) 是最优解,而微软官方推的各种 MVC 技术、Sun/Oracle 官方推的各种 MVC 技术,包括 Google Web Toolkit (以纯后端 java 代码写程序,之后部分代码将编译、转换行成前端 html/js, 思路古怪),都可以扔在一边了。
----2022/01/20,基于答复来补充:
补充一下,用 mq 的人,往往期望,借助 mq, 做到接口数据"不重复、不遗漏"地发到另一个系统。
一旦使用了 MQ, 理论上讲,无论如何,都是做不到数据"不重复、不遗漏"的。
考虑 system_a 发数据到 mq_x, 而 system_b 从 mq_x 收数据,分析如下:
1) system_a 发数据到 mq_x, 正常情况下,mq_x 收到数据、反馈"收到",system_a 更改本系统某个数据状态为已发送。
极端情况下,mq_x 反馈"收到"、system_a 更改本地数据状态失败。然后再来一次,数据就发重复了。
2) system_b 从 mq_x 收数据, 正常操作,有两类可能:
2.1, 从 mq_x 弹出一个数据,system_b 保存数据。
极端情况下, mq_x 弹出数据成功、system_b 保存数据失败,数据丢失。
2.2 从 mq_x 队列顶部/底部取一个数据,system_b 保存数据,system_b 通知 mq_x 删一个数据。
极端情况,mq_x 取数据成功、system_b 保存成功、system_b 通知 mq_x 删数据时网络断开。之后 system_b 会收到重复数据。
根源是 mq 操作,与数据库操作,合在一起无法做成一个技术上的 transaction(整个流程多个操作,要么一起成功、要么一起失败)。
---- 欢迎转载,转载请注明出处。此博客同时发表于 https://my.oschina.net/jacklondon ,https://www.cnblogs.com/jacklondon/,https://www.zheguisoft.com/staff_blogs/jacklondon_chen 。
在IsthereanadvantagetorunningJRubyifyoudon'tknowanyJava?,如果您只是想要比“Ruby”(MRI/YARV)更好的Ruby实现,人们建议使用JRuby。您不使用JRuby的潜在原因是什么?其他人提到的是:短节目表演。JRuby被描述为对于较长的程序速度更快,但初始化时间较长。讨论了解决方法inthisquestion.C扩展:JRuby支持一些,butnotall,用于MRI/YARV的C扩展。并发是一把双刃剑。There'snon-thread-safecodeoutthere人们还没有发现,因为最流行的实现没有真正的并发性。JRu
Ruby语言源代码,lib/fileutils.rb,方法mkdir_p简化后如下所示:defmkdir_p(list,options={})return*listifoptions[:noop]#...return*listend从我对Ruby的了解和测试来看,这里没有意义。是否有任何边缘情况会产生影响?相关地,如果不存在这会影响输出的边缘情况,splat是完全无害的还是会导致任何Ruby解释器执行额外(不必要的)工作? 最佳答案 returnl和return*l其实是有区别的;这有助于了解要查找的内容。一个重要的区别是它生成数组
我花了一段时间才理解private方法在Ruby中是如何工作的,这让我觉得很尴尬。有谁知道是否有充分的理由按原样处理私有(private)方法?仅仅是历史原因吗?还是实现原因?还是有充分的逻辑理由(即语义)?例如:classPersonprivateattr_reader:weightendclassSpyRuby在第(1)、(2)和(5)行的行为似乎是合理的。(6)可以的事实有点奇怪,尤其是来自Java和C++。这有什么好的理由吗?我真的不明白为什么(3)失败了!一个解释,有人吗?第(4)行的问题看起来像是语法上的歧义,与'private'无关。有什么想法吗?
所以我一直在研究在鼠标坐标处生成气泡的脚本。这是一个非常基本的脚本,可以计算一些东西,比如随机不透明度、随机大小等。vartransform=(function(){//ThispieceistotestwhethertransformshouldbeprefixedornotvartestEl=document.createElement('div')if(testEl.style.transform==null){varvendors=['Webkit','Moz','ms']for(varvendorinvendors){if(testEl.style[vendors[vendo
我知道Boolean()、String()和Number()转换,以及''+...、!!...和+...转换方法。我想知道是否有任何理由不使用函数构造函数? 最佳答案 通常不鼓励使用!!,因为对于那些没有见过它的人来说,它的实际用途是什么并不清楚。也就是说,它不到Boolean()字符的三分之一。此外,我不确定在Javascript中实际需要多久转换一次bool值,因为它通常是隐式转换,因为Javascript是弱类型的。 关于javascript-有什么理由用!!做bool转换吗?而不
我理解递归深层对象以对其每个子属性执行浅层Object.freeze的意义。卡住函数对象的值有什么意义?由于较高级别的浅卡住,引用已被卡住——是否可以改变函数对象的值本身?例子://LibraryFunction[deepFreezesource](https://github.com/substack/deep-freeze/blob/master/index.js)functiondeepFreeze(o){Object.freeze(o);//shallowfreezethetoplevelObject.getOwnPropertyNames(o).forEach(functio
我正在构建一个涉及通过第三方进行身份验证的应用程序。为了使进程不重定向实际的应用程序,我打开一个新窗口,然后进行身份验证并在成功后返回主窗口。然而,这并没有按计划进行。当弹出窗口重定向到第三方并返回时,window.opener获取null。仍然可以通过window.close()关闭弹出窗口,但我还需要刷新主窗口中的登录区域,如下所示:window.opener.check_auth_status();我真的希望有办法解决这个问题,例如将函数绑定(bind)到主窗口中的弹出关闭?刷新整个页面是非常不必要的。一种方法是setanintervaltomainwindow检查弹出窗口是否关
我已经和一位同事就这个话题争论了大约一个星期。我非常喜欢速记代码,尽可能使用三元组等。最近,他一直在指责我使用双重感叹号。在运行了无数次测试之后,我开始同意他的观点……在我的代码中使用双重感叹号可能并不明智。考虑一下:varmyvar="Hello";return(!!myvar?"Varisset":"Varisnotset");上面的示例按预期工作。然而,如果我们检查一个可能返回undefinedvariable,我们会得到一个错误,尤其是在IE7中。然而,如果我们在我们的控制台中运行它,我们会得到我们预期的结果:if(randomvar)alert('Works');使用这种方法
在学习JavaScript的过程中了解到引入了Let和const来解决Var的全局作用域和提升的问题如果重新声明则不会报错。现在我可以完全不使用var来编写代码吗?还是我应该暂时了解它们,等到它们被广泛“接受”之后?也就是说,暂时只用let和const是不是应该担心兼容性问题? 最佳答案 直接回答问题-不,你不能,因为兼容性问题,@suraj善意地提醒我们。话虽如此,在现代JS开发中,您越来越不可能使用var,因为let和const具有明显的优势,除了var的一些特定用途,并将使用BabelJS、TypeScript甚至现在的Web
在我的一些电子商务应用程序中,我已经开始使用src="//domain.com/file.js"来处理我想要引用的外部托管脚本包括。在我的电子商务应用程序中,并非所有页面都实际使用https,因为并非每个页面都有表单。我想知道总是使用它是否真的有任何缺点,因为它也是http的快捷方式,而且您始终可以避免不安全的IE警告。 最佳答案 如果您的目的是从与页面加载相同的协议(protocol)加载资源,那么使用它是实现它的完美方式。但是,您可能需要从http加载一些资源,即使您的页面当前在https下提供(假设资源仅在http下提供)>或