rabbitmq——岁月云实战条记

打印 上一主题 下一主题

主题 988|帖子 988|积分 2964

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 死信队列和延时队列

  1. x-message-ttl定义了消息的时间生存期,有了这特性,就可以拓展一些功能,比如高并发的流量控制。
复制代码
        下面通过x-message-ttl设置了一个延迟队列,通过DECLARE_DEAD_ROUTING_KEY与死信互换机declareDeadExchange进行匹配路由。
  1. @Configuration
  2. public class RabbitMQDelayConfig {
  3.     @Value("${spring.rabbitmq.declare.exchange}")
  4.     private String DECLARE_EXCHANGE;
  5.     @Value("${spring.rabbitmq.declare.queue}")
  6.     private String DECLARE_QUEUE;
  7.     @Value("${spring.rabbitmq.decl
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

立聪堂德州十三局店

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表