Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >在微服务中使用RabbitMQ也需要规范化

在微服务中使用RabbitMQ也需要规范化

作者头像
Bug开发工程师
发布于 2021-01-13 06:31:32
发布于 2021-01-13 06:31:32
1.1K00
代码可运行
举报
文章被收录于专栏:码农沉思录码农沉思录
运行总次数:0
代码可运行

这篇文章的读者,假设您已经对RabbitMQ、SpringBoot和微服务有一定的理解。此文章来自于对内部技术规范指引的编辑。

典型应用场景

RabbitMQ典型应用场景

此图展示了RabbitMQ的典型应用场景,生产者把消息发送到Exchange,消费者从Queue读取消息,消息可通过topic、header、direct、fanout四种方式由Exchange路由到Queue。

在微服务中的开发过程中,如果任由开发者定义Exchange、Queue以及路由方式,即便优秀的程序员正确定义了这些要素,服务依赖会生成一个巨复杂的网状结构,管理起来必定是灾难。所以要对使用进行规范,这是技术管理应有之意。

通过文档定义规范,这种约束是弱势的,需要不断核查规范的实施情况。通过代码、架构定义规范,在不需要开发者介入的情况下执行规范,屏蔽程序的复杂性,是架构师需要考虑的问题。优秀的架构使开发过程简单化、规范化,使程序员专注业务开发,提升业务开发的效率。

按照这种指导思想,对RabbitMQ的使用进行了规范和约束。

微服务应用规范化

微服务中的应用场景

约束如下:

  1. 如若服务启用了Producer,则创建与服务名相同的Exchange,发送消息到此Exchange。
  2. 如若服务启用了Consumer,则创建与服务名相同的Queue,从此Queue中订阅消息。
  3. 读取程序中定义的Receiver,解析定义的service(其实就是Exchange名字)和tag,创建Queue到Exchange的绑定关系。
  4. 以上过程,在服务启动时执行,无需程序员干预。

优点: 程序员无需关注消息发给谁,只需要调用服务发送消息即可;程序员无需关注消息如何路由,只需要为自己关心的tag,定义receiver处理类。另外,因为采用统一的api发送和接收,为未来的扩展提供了便利。

缺点: 每个服务只有一个Exchange,只有一个Queue,并且只使用了Topic路由;所以,性能并不是最优的,只能在中度或轻度处理场景中使用。如若有个性化的处理场景,还是需要自定义这些组件的。

综述: 在AntSentry的微服务体系中,大流量量使用了Kinesis队列(类kafka),大并发使用了点对点的SQS队列,RabbitMQ只是用来解决服务之间的调用问题,流量并不会太大,其灵活性弥补了Kinesis和SQS的不足,在这个特有的场景中,满足了业务需求。在大多数的微服务场景中,这种应用模式是可以满足大多数的需求的,希望对你有所帮助。

使用方法

1)修改pom,升级api版本(此项目并未开源,公司内部使用)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<dependency>
    <groupId>xx</groupId>
    <artifactId>cloud-api-tools</artifactId>
    <version>1.3.3-SNAPSHOT</version>
</dependency>

2)采用自定义AutoConfig,配置后即按照规范启用了rabbitmq

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
com:
  xx:
    rabbitmq:
      host: 10.30.60.41
      password: XX
      userName: xx
      port: 5672
      vhost: dev

3)创建消息实体

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Data
public class XXDemoInfo extends MQMessage {
 
    @Override
    public String getTag() {
        return "work";  // 消息的标识
    }
 
    private String name;
    private Long timestamp;
}

4)创建接受者,配置消息的来源以及tag;可配置多个注解,实现一个receiver处理多种tag

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@RabbitMQReceiver(service = "cloud-xx-service", tag = "work") 
public class XXTagReceiver implements RabbitMQBaseReceiver<XXDemoInfo> {
 
    @Override
    public void receive(XXDemoInfo xxDemoInfo) {
 
    }
}

5)发送消息示例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Autowired
RabbitMQSender sender;
 
 
public void send() {
    XXDemoInfo info = new XXDemoInfo();
    info.setName("Test Message");
    info.setTimestamp(System.currentTimeMillis());
    sender.send(info);
}
  1. 配置ReceiverScan
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@RabbitMQReceiverScan(basePackages = {"com.xx.receiver"})
// 填写receiver类所在的包
public class SomeApplication implements CommandLineRunner{

}

实现关键技术

这里感觉没什么好讲的,总不能贴出来大片的代码吧!就把启动过程简单画一下吧。

点个在看支持我吧,转发就更好了

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-01-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码农沉思录 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
人工智能(XAI)可解释性的研究进展!
本文从数据为中心的角度,研究了数据收集、处理和分析如何有助于可解释的人工智能(XAI)。将现有工作分为三类,分别服务于对深度模型的解释、对训练数据的启示和对领域知识的洞察,并提炼出针对不同模式的数据挖掘操作和DNN行为描述符的数据挖掘方法,提供了一个全面的、以数据为中心的XAI从数据挖掘方法和应用的角度进行的考察。
算法进阶
2024/06/13
6060
人工智能(XAI)可解释性的研究进展!
Nat. Mach. Intell. | 可解释性人工智能(xAI)遇上药物发现
今天给大家介绍瑞士苏黎世联邦理工学院化学与应用生物科学系 Gisbert Schneider等人在Nature Machine Intelligence上发表的文章“Drug discovery with explainable artificial intelligence”。本文综述总结了可解释人工智能最突出的算法概念,并预测了未来的机会、潜在的应用以及一些剩余的挑战。希望能为可解释人工智能技术的发展和接受做出更多的努力。
DrugAI
2021/02/02
7490
Nat. Mach. Intell. | 可解释性人工智能(xAI)遇上药物发现
可解释人工智能: 构建可解释机器学习系统,330页pdf
https://www.manning.com/books/interpretable-ai
数据STUDIO
2023/09/04
4260
可解释人工智能: 构建可解释机器学习系统,330页pdf
JCIM | 可解释人工智能助力临床前相关性评估
今天给大家介绍来自苏黎世联邦理工学院的José Jiménez-Luna、Gisbert Schneider,以及勃林格殷格翰药业有限公司的Miha Skalic、Nils Weskamp四人联合发表在JCIM期刊上的一项研究成果《Coloring Molecules with Explainable Artificial Intelligence for Preclinical Relevance Assessment》。该研究通过将积分梯度可解释人工智能(XAI)方法应用于图神经网络模型,提高了理性分子设计的建模透明度,并基于四个药理学相关ADME终点的实验,验证了所提出的方法能够突出与已知药效团基序一致的分子特征和结构元素,正确识别性质断崖,并提供了对非特异性配体-靶标相互作用的见解。
DrugAI
2021/07/05
5500
Nat. Rev. Genet. | 通过可解释人工智能从深度学习中获得遗传学见解
今天为大家介绍的是来自Maxwell W. Libbrecht,Wyeth W. Wasserman和Sara Mostafavi的一篇关于人工智能对于基因组学的可解释性的研究的综述。基于深度学习的人工智能(AI)模型现在代表了基因组学研究中进行功能预测的最先进水平。然而,模型预测的基础往往是未知的。对于基因组学研究人员来说,这种缺失的解释性信息往往比预测本身更有价值,因为它可以使人们对遗传过程有新的认识。作者回顾了可解释人工智能(xAI)新兴领域的进展,以启发生命科学研究人员对复杂深度学习模型的洞察力。之后,作者分类讨论了模型解释的方法,包括直观地理解每种方法的工作原理及其在典型高通量生物数据集中的基本假设和局限性。
DrugAI
2022/11/28
6850
Nat. Rev. Genet. | 通过可解释人工智能从深度学习中获得遗传学见解
【综述专栏】强化学习可解释性
在科学研究中,从方法论上来讲,都应“先见森林,再见树木”。当前,人工智能学术研究方兴未艾,技术迅猛发展,可谓万木争荣,日新月异。对于AI从业者来说,在广袤的知识森林中,系统梳理脉络,才能更好地把握趋势。为此,我们精选国内外优秀的综述文章,开辟“综述专栏”,敬请关注。
马上科普尚尚
2022/02/24
5450
【综述专栏】强化学习可解释性
趣味科普|可解释性人工智能
可解释性人工智能 PART.01 概述 1 可解释性人工智能(XAI)定义 随着机器学习和人工智能技术在各个领域中的迅速发展和应用,向用户解释算法输出的结果变得至关重要。人工智能的可解释性是指人能够理解人工智能模型在其决策过程中所做出的选择,包括做出决策的原因,方法,以及决策的内容[1]。简单的说,可解释性就是把人工智能从黑盒变成了白盒。 2 研究的作用 可解释性是现在人工智能在实际应用方面面临的最主要的障碍之一。人们无法理解或者解释为何人工智能算法能取得这么好的表现。可解释性人工智能模型的作用
数据派THU
2023/03/29
9920
趣味科普|可解释性人工智能
XAI系列二:模型可解释性技术概览
传统网络安全威胁分析依赖专家知识及基本的数据分析,然而随着攻击技术的复杂化、安全数据接入的多元化,高性能人工智能技术越来越多的应用到威胁分析中,试图解放安全行业的生产力。更复杂的模型往往具备高知识容量,能够支持大规模、高维非线性数据的分析,于此同时,其内部表示学习过程、决策过程愈发不可解释,执行逻辑难以被人类直观理解,逐渐成为“黑盒”模型,反而降低了安全应用的智能化、自动化程度。
绿盟科技研究通讯
2019/12/11
3.7K0
XAI系列二:模型可解释性技术概览
XAI有什么用?探索LLM时代利用可解释性的10种策略
你是否也好奇,在大模型时代,可解释性人工智能技术(XAI)有怎样的使用价值?近日,来自佐治亚大学、新泽西理工学院、弗吉尼亚大学、维克森林大学、和腾讯 AI Lab 的研究者联合发布了解释性技术在大语言模型(LLM)上的可用性综述,提出了 「Usable XAI」 的概念,并探讨了 10 种在大模型时代提高 XAI 实际应用价值的策略。
机器之心
2024/04/12
2220
XAI有什么用?探索LLM时代利用可解释性的10种策略
顿新国:可解释人工智能问题
当代人工智能技术在给人类带来多方面福利的同时,面临黑箱、鲁棒性和可解释性等问题,发展值得信赖的可解释人工智能已成为人工智能领域的核心关切。论文在论证可解释人工智能为什么重要的基础上,对可解释人工智能的内涵进行界定,进而提出发展可解释人工智能需遵循的一些原则,它们也可看作可解释人工智能需达致的目标和要求。论文最后提出了两点关于实现可解释人工智能途径的构想。
用户9861443
2023/09/14
3140
顿新国:可解释人工智能问题
npj | digital medicine:可解释性人工智能构建AD患者结构性脑畸变的个性化特征
摘要:基于磁共振成像(MRI)数据的深度学习在神经系统疾病诊断与预后中潜力巨大,但临床应用受限,因其模型不透明。本研究通过训练卷积神经网络(CNN)区分痴呆患者与健康对照,并利用分层相关性传播(LRP)提供个体层面的解释,克服了这一挑战。验证表明,模型识别与痴呆结构性脑畸变知识相符。在轻度认知障碍(MCI)数据集中,可解释的痴呆分类器预测向痴呆过渡,其空间丰富的解释补充了模型预测,并表征了个体大脑疾病表现。我们构建了形态学记录,可视化痴呆病理学数量和位置,跟踪疾病进展。形态学记录不仅验证了相关性图的有效性,还揭示了其在患者分层和疾病进展预测中的临床效用,为精准医学提供了有力支持。
悦影科技
2024/11/12
1970
JMC|用于化合物优化中性质预测的可解释机器学习
大多数最先进的 ML 模型都具有黑匣子特性。在ML 模型的预测性能和解释能力之间通常需要权衡。
智药邦
2022/03/04
1.2K0
JMC|用于化合物优化中性质预测的可解释机器学习
决策过程是魔法还是科学?首个多模态大模型的可解释性综述全面深度剖析
本文由香港科技大学(广州)、上海人工智能实验室、中国人民大学及南洋理工大学联合完成。主要作者包括香港科技大学(广州)研究助理党运楷、黄楷宸、霍家灏(共同一作)、博士生严一博、访学博士生黄思睿、上海AI Lab青年研究员刘东瑞等,通讯作者胡旭明为香港科技大学/香港科技大学(广州)助理教授,研究方向为可信大模型、多模态大模型等。
机器之心
2025/02/14
2430
决策过程是魔法还是科学?首个多模态大模型的可解释性综述全面深度剖析
时间序列关于可解释性值得关注的论文汇总(未完待续)
梳理了一些时间序列可解释性研究文章(后台回复:“论文合集”获取),深度学习的可解释性研究一直是热门,而时间序列的可解释性同样非常重要。这是因为时序模型被大量应用到特定领域:金融、医疗、交通等,这些应用场景对模型的可解释要求更高,需要提供可解释的预测。
科学最Top
2024/09/18
2610
时间序列关于可解释性值得关注的论文汇总(未完待续)
「强化学习可解释性」最新2022综述
来源:新智元本文共10000字,建议阅读15分钟本文本文探索XRL的基础性问题,并对现有工作进行综述。 强化学习是一种从试错过程中发现最优行为策略的技术,已经成为解决环境交互问题的通用方法。 然而,作为一类机器学习算法,强化学习也面临着机器学习领域的公共难题,即难以被人理解。缺乏可解释性限制了强化学习在安全敏感领域中的应用,如医疗、驾驶等,并导致强化学习在环境仿真、任务泛化等问题中缺乏普遍适用的解决方案。 为了克服强化学习的这一弱点,涌现了大量强化学习可解释性(Explainable Reinforcem
数据派THU
2022/03/04
7810
事后解释VS自解释,牛津CS博士小姐姐134页毕业论文探索神经网络内部构造
机器之心报道 编辑:小舟、杜伟 如何解释深度神经网络对于人工智能的发展具有重要的作用,也吸引了越来越多学界和业界人士的注意。在这篇长达 134 页的博士论文中,一位来自牛津大学的计算机科学博士生对这一课题进行了深入的探讨,带我们走进深度神经网络的世界。 近年来,深度神经网络正在计算机视觉、自然语言处理和语音识别等多种领域发挥着重要作用,推动了人工智能的发展。但是,深度神经网络仍存在一些局限性,例如这些模型的决策过程通常无法向用户解释。 但同时,在医疗、金融、法律等各个领域,了解人工智能系统决策制定背后的原因
机器之心
2023/03/29
2530
事后解释VS自解释,牛津CS博士小姐姐134页毕业论文探索神经网络内部构造
CellPress | 医学上人工智能的缺失
整个医疗保健链中的利益相关者正在寻求将人工智能(AI)纳入其决策过程。从早期药物开发到临床决策支持系统,已经看到了AI如何提高效率和降低成本的示例。本文讨论了应优先考虑的一些关键因素,以使AI在整个医疗保健价值链中成功集成。特别是,研究者认为对模型的可解释性的关注对于深入了解潜在的生物学机制并指导进一步的研究至关重要。此外,讨论了在任何AI框架中集成各种类型的数据以限制偏差,提高准确性并为医学的跨学科性质建模的重要性。
DrugAI
2021/02/01
5400
综述 | Cancer.Cell | 人工智能与转化癌症研究交叉领域的新视野
错误!!! cannot unpack non-iterable NoneType object 错误!!! cannot unpack non-iterable NoneType object
生信菜鸟团
2025/04/26
1730
综述 | Cancer.Cell | 人工智能与转化癌症研究交叉领域的新视野
如何评估可解释的人工智能系统给出的解释的质量
https://link.springer.com/article/10.1007/s13218-020-00636-z
CreateAMind
2023/09/01
4050
如何评估可解释的人工智能系统给出的解释的质量
可解释AI技术简介、分类与相关工具
最近由于工作需要,在阅读一些关于可解释AI方面的论文和书籍,对该领域有了一点浅显的认识,本文从技术简介、技术分类与主要研究方向加以简要介绍。
luanhz
2023/01/30
1.4K0
推荐阅读
相关推荐
人工智能(XAI)可解释性的研究进展!
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验