千家信息网

在微服务中如何规范化使用RabbitMQ

发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,这篇文章主要为大家展示了"在微服务中如何规范化使用RabbitMQ",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"在微服务中如何规范化使用RabbitMQ"
千家信息网最后更新 2025年12月02日在微服务中如何规范化使用RabbitMQ

这篇文章主要为大家展示了"在微服务中如何规范化使用RabbitMQ",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"在微服务中如何规范化使用RabbitMQ"这篇文章吧。

典型应用场景

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版本(此项目并未开源,公司内部使用)


xx
cloud-api-tools
1.3.3-SNAPSHOT

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

com:
xx:
rabbitmq:
host: 10.30.60.41
password: XX
userName: xx
port: 5672
vhost: dev

3)创建消息实体

@Data
public class XXDemoInfo extends MQMessage {

@Override
public String getTag() {
return "work"; // 消息的标识
}

private String name;
private Long timestamp;
}

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

@RabbitMQReceiver(service = "cloud-xx-service", tag = "work") 
public class XXTagReceiver implements RabbitMQBaseReceiver {

@Override
public void receive(XXDemoInfo xxDemoInfo) {

}
}

5)发送消息示例

@Autowired
RabbitMQSender sender;


public void send() {
XXDemoInfo info = new XXDemoInfo();
info.setName("Test Message");
info.setTimestamp(System.currentTimeMillis());
sender.send(info);
}
  1. 配置ReceiverScan
@RabbitMQReceiverScan(basePackages = {"com.xx.receiver"})
// 填写receiver类所在的包
public class SomeApplication implements CommandLineRunner{

}

实现关键技术

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


以上是"在微服务中如何规范化使用RabbitMQ"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

服务 消息 场景 程序 应用 开发 程序员 路由 过程 处理 配置 业务 典型 内容 架构 篇文章 帮助 优秀 复杂 相同 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 同心圆数据库人才库 计算机网络技术可以当黑客吗 服务器参数 模板参数 服务器为什么配置虚拟网卡 青浦区软件开发技术怎么样 山东优品科技软件开发团队 文献数据库有什么构成 基因数据库筛选目的是什么 婚庆租车软件开发 网络安全 本科 云服务器安全软件服务公司 vb数据库是什么 学财务的软件开发 长宁区智能化软件开发定制报价表 置家网络技术有限公司 网络存储技术基于什么数据库 工行软件开发中心珠海基地 滁州联想服务器内存条推荐商家 怎么进入不同端口数据库 山西诚信网络技术咨询联系人 服务器为什么配置虚拟网卡 邯郸学院图书馆数据库 戴尔服务器开机显示ip 社会科学数据库有哪几种 攻击自己购买的云服务器 网络安全法和信息法的区别 有网络安全或者编程兵吗 R410服务器风扇一直全速 开一个软件开发有限公司 防范网络安全常见方法
0