当前位置: 首页 > news >正文

rabbitmq——岁月云实战笔记

1 rabbitmq设计

        生产者并不是直接将消息投递到queue,而是发送给exchange,由exchange根据type的规则来选定投递的queue,这样消息设计在生产者和消费者就实现解耦。

        rabbitmq会给没有type预定义一些exchage,而实际我们却应该使用自己定义的。

1.1 用户注册设计

        用户在官网注册,因为官网与其他各子系统是分库的,因此涉及到用户注册后,用户的账号信息也需要同步各子产品,于是就有了下面的设计。2018的时候SOA设计我还用通过otter进行同步,但是现在觉得还不如使用rabbitmq,因为消息队列有很多作用,而且有些情况是,各个子系统承建时间不一样,各自的创建用户后,也会触发其他的操作,这些otter的小表复制策略就不是那么好了。

1.1.1 生产者        

        岁月云官网,可以看到这个里面只需要一个exchange名称即可,将对象转成字符串作为消息发送过去即可。

1.1.2 消费者

        消费者中定义的监听是针对queue,ignoreDeclarationExceptions是幂等设计,可以确保即使某个实例的声明操作失败(例如,因为另一个实例已经成功声明了相同的资源),整个系统仍然可以正常工作。

        fanout是一种广播,绑定到此eayc_user_add_change的queue都可以收到此消息。因为从官网下发的消息,到各子系统都应该收到,并各自创建。

        下面是子系统acc的配置

        具体消费的代码如下所示,

        下面是子系统ps的配置,与acc使用同一个exchange,但queue是不同的。

1.2 死信队列和延时队列

x-message-ttl定义了消息的时间生存期,有了这特性,就可以拓展一些功能,比如高并发的流量控制。

        下面通过x-message-ttl设置了一个延迟队列,通过DECLARE_DEAD_ROUTING_KEY与死信交换机declareDeadExchange进行匹配路由。

@Configuration
public class RabbitMQDelayConfig {@Value("${spring.rabbitmq.declare.exchange}")private String DECLARE_EXCHANGE;@Value("${spring.rabbitmq.declare.queue}")private String DECLARE_QUEUE;@Value("${spring.rabbitmq.decl
http://www.lryc.cn/news/518194.html

相关文章:

  • Matlab APP Designer
  • CSS语言的编程范式
  • 一个简单的php博客
  • 解决anaconda prompt找不到的情况
  • 【深度学习】多目标融合算法(二):底部共享多任务模型(Shared-Bottom Multi-task Model)
  • 如何使用vue引入three.js
  • 城市生命线安全综合监管平台
  • 计算机毕设【开题报告】怎么写?
  • Go学习:多重赋值与匿名变量
  • 【Ubuntu 上搭建 Nginx-RTMP 服务】
  • 使用uniapp 微信小程序一些好用的插件分享
  • linux centos挂载未分配的磁盘空间
  • C语言凯撒密码程序分享
  • 2025新年源码免费送
  • 阿里云ethereum
  • 子父组件传值
  • QT自定义工具条渐变背景颜色一例
  • 2025最新Facebook广告投放常见问题:如何提高广告效果?
  • 双向导航和单向导航
  • Unity3d 基于Barracuda推理库和YOLO算法实现对象检测功能
  • Lambda离线实时分治架构深度解析与实战
  • Spring Boot教程之五十一:Spring Boot – CrudRepository 示例
  • jenkins入门6 --拉取代码
  • CAPL概述与环境搭建
  • Virgo:增强慢思考推理能力的多模态大语言模型
  • 偃动访无穿戴动作捕捉系统:赋能多行业开启动作捕捉新篇章
  • mikro-orm 和typeorm 对比
  • Docker入门之docker基本命令
  • mysql的一些函数及其用法
  • NO.3 《机器学习期末复习篇》以题(问答题)促习(人学习),满满干huo,大胆学大胆补!